xDAI Price: $0.999533 (+0.01%)

Contract

0x4554fE75c1f5576c1d7F765B2A036c199Adae329

Overview

XDAI Balance

Gnosis Chain LogoGnosis Chain LogoGnosis Chain Logo0 XDAI

XDAI Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Create404869332025-06-09 0:48:30229 days ago1749430110IN
0x4554fE75...99Adae329
0 XDAI0.0001185
Request400914012025-05-16 12:39:15253 days ago1747399155IN
0x4554fE75...99Adae329
0.01 XDAI0.000000010.00010002
Request374533512024-12-10 10:50:40410 days ago1733827840IN
0x4554fE75...99Adae329
0.01 XDAI0.000086133

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
443277902026-01-24 17:46:5020 secs ago1769276810
0x4554fE75...99Adae329
0.01 XDAI
443277902026-01-24 17:46:5020 secs ago1769276810
0x4554fE75...99Adae329
0.01 XDAI
443277892026-01-24 17:46:4525 secs ago1769276805
0x4554fE75...99Adae329
0.01 XDAI
443277892026-01-24 17:46:4525 secs ago1769276805
0x4554fE75...99Adae329
0.01 XDAI
443277812026-01-24 17:46:051 min ago1769276765
0x4554fE75...99Adae329
0.01 XDAI
443277812026-01-24 17:46:051 min ago1769276765
0x4554fE75...99Adae329
0.01 XDAI
443277542026-01-24 17:43:503 mins ago1769276630
0x4554fE75...99Adae329
0.01 XDAI
443277542026-01-24 17:43:503 mins ago1769276630
0x4554fE75...99Adae329
0.01 XDAI
443277522026-01-24 17:43:403 mins ago1769276620
0x4554fE75...99Adae329
0.01 XDAI
443277522026-01-24 17:43:403 mins ago1769276620
0x4554fE75...99Adae329
0.01 XDAI
443277482026-01-24 17:43:203 mins ago1769276600
0x4554fE75...99Adae329
0.01 XDAI
443277482026-01-24 17:43:203 mins ago1769276600
0x4554fE75...99Adae329
0.01 XDAI
443277302026-01-24 17:41:505 mins ago1769276510
0x4554fE75...99Adae329
0.01 XDAI
443277302026-01-24 17:41:505 mins ago1769276510
0x4554fE75...99Adae329
0.01 XDAI
443276992026-01-24 17:39:157 mins ago1769276355
0x4554fE75...99Adae329
0.01 XDAI
443276992026-01-24 17:39:157 mins ago1769276355
0x4554fE75...99Adae329
0.01 XDAI
443276922026-01-24 17:38:408 mins ago1769276320
0x4554fE75...99Adae329
0.01 XDAI
443276922026-01-24 17:38:408 mins ago1769276320
0x4554fE75...99Adae329
0.01 XDAI
443276872026-01-24 17:38:158 mins ago1769276295
0x4554fE75...99Adae329
0.01 XDAI
443276872026-01-24 17:38:158 mins ago1769276295
0x4554fE75...99Adae329
0.01 XDAI
443276862026-01-24 17:38:109 mins ago1769276290
0x4554fE75...99Adae329
0.01 XDAI
443276862026-01-24 17:38:109 mins ago1769276290
0x4554fE75...99Adae329
0.01 XDAI
443276722026-01-24 17:36:5510 mins ago1769276215
0x4554fE75...99Adae329
0.01 XDAI
443276722026-01-24 17:36:5510 mins ago1769276215
0x4554fE75...99Adae329
0.01 XDAI
443276602026-01-24 17:35:5011 mins ago1769276150
0x4554fE75...99Adae329
0.01 XDAI
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MechMarketplace

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

// Agent Mech interface
interface IMech {
    /// @dev Checks if the signer is the mech operator.
    function isOperator(address signer) external view returns (bool);

    /// @dev Registers a request by a marketplace.
    /// @param account Requester account address.
    /// @param data Self-descriptive opaque data-blob.
    /// @param requestId Request Id.
    function requestFromMarketplace(address account, bytes memory data, uint256 requestId) external payable;

    /// @dev Revokes the request from the mech that does not deliver it.
    /// @notice Only marketplace can call this function if the request is not delivered by the chosen priority mech.
    /// @param requestId Request Id.
    function revokeRequest(uint256 requestId) external;
}

// Karma interface
interface IKarma {
    /// @dev Changes agent mech karma.
    /// @param mech Agent mech address.
    /// @param karmaChange Karma change value.
    function changeMechKarma(address mech, int256 karmaChange) external;

    /// @dev Changes requester -> agent mech karma.
    /// @param requester Requester address.
    /// @param mech Agent mech address.
    /// @param karmaChange Karma change value.
    function changeRequesterMechKarma(address requester, address mech, int256 karmaChange) external;
}

// Staking interface
interface IStaking {
    enum StakingState {
        Unstaked,
        Staked,
        Evicted
    }

    // Service Info struct
    struct ServiceInfo {
        // Service multisig address
        address multisig;
        // Service owner
        address owner;
        // Service multisig nonces
        uint256[] nonces;
        // Staking start time
        uint256 tsStart;
        // Accumulated service staking reward
        uint256 reward;
        // Accumulated inactivity that might lead to the service eviction
        uint256 inactivity;
    }

    /// @dev Gets the service staking state.
    /// @param serviceId Service Id.
    /// @return stakingState Staking state of the service.
    function getStakingState(uint256 serviceId) external view returns (StakingState stakingState);

    /// @dev Gets staked service info.
    /// @param serviceId Service Id.
    /// @return sInfo Struct object with the corresponding service info.
    function getServiceInfo(uint256 serviceId) external view returns (ServiceInfo memory);
}

// Staking factory interface
interface IStakingFactory {
    /// @dev Verifies a service staking contract instance.
    /// @param instance Service staking proxy instance.
    /// @return True, if verification is successful.
    function verifyInstance(address instance) external view returns (bool);
}

/// @dev Only `owner` has a privilege, but the `sender` was provided.
/// @param sender Sender address.
/// @param owner Required sender address as an owner.
error OwnerOnly(address sender, address owner);

/// @dev Provided zero address.
error ZeroAddress();

/// @dev Provided zero value.
error ZeroValue();

/// @dev Agent does not exist.
/// @param agentId Agent Id.
error AgentNotFound(uint256 agentId);

/// @dev Not enough value paid.
/// @param provided Provided amount.
/// @param expected Expected amount.
error NotEnoughPaid(uint256 provided, uint256 expected);

/// @dev Request Id not found.
/// @param requestId Request Id.
error RequestIdNotFound(uint256 requestId);

/// @dev Value overflow.
/// @param provided Overflow value.
/// @param max Maximum possible value.
error Overflow(uint256 provided, uint256 max);

/// @dev Provided account is not a contract.
/// @param account Account address.
error NotContract(address account);

/// @dev Caught reentrancy violation.
error ReentrancyGuard();

/// @dev Account is unauthorized.
/// @param account Account address.
error UnauthorizedAccount(address account);

/// @dev Specified service Id is not staked.
/// @param stakingInstance Staking contract instance.
/// @param serviceId Service Id.
error ServiceNotStaked(address stakingInstance, uint256 serviceId);

/// @dev Provided value is out of bounds.
/// @param provided value.
/// @param min Minimum possible value.
/// @param max Maximum possible value.
error OutOfBounds(uint256 provided, uint256 min, uint256 max);

/// @dev The request is already delivered.
/// @param requestId Request Id.
error AlreadyDelivered(uint256 requestId);

/// @dev Priority mech response timeout is not yet met.
/// @param expected Expected timestamp.
/// @param current Current timestamp.
error PriorityMechResponseTimeout(uint256 expected, uint256 current);

// Mech delivery info struct
struct MechDelivery {
    // Priority mech address
    address priorityMech;
    // Delivery mech address
    address deliveryMech;
    // Requester address
    address requester;
    // Response timeout window
    uint32 responseTimeout;
}

/// @title Mech Marketplace - Marketplace for posting and delivering requests served by agent mechs
contract MechMarketplace {
    event OwnerUpdated(address indexed owner);
    event FactoryUpdated(address indexed factory);
    event MinMaxResponseTimeoutUpdated(uint256 minResponseTimeout, uint256 maxResponseTimeout);
    event MechRegistrationStatusChanged(address indexed mech, bool status);
    event MarketplaceRequest(address indexed requester, address indexed requestedMech, uint256 requestId, bytes data);
    event MarketplaceDeliver(address indexed priorityMech, address indexed actualMech, address indexed requester,
        uint256 requestId, bytes data);

    enum RequestStatus {
        DoesNotExist,
        RequestedPriority,
        RequestedExpired,
        Delivered
    }

    // Contract version number
    string public constant VERSION = "1.0.0";
    // Domain separator type hash
    bytes32 public constant DOMAIN_SEPARATOR_TYPE_HASH =
        keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
    // Original domain separator value
    bytes32 public immutable domainSeparator;
    // Original chain Id
    uint256 public immutable chainId;
    // Minimum response time
    uint256 public immutable minResponseTimeout;
    // Maximum response time
    uint256 public immutable maxResponseTimeout;
    // Mech karma contract address
    address public immutable karmaProxy;
    // Staking factory contract address
    address public immutable stakingFactory;

    // Number of undelivered requests
    uint256 public numUndeliveredRequests;
    // Number of total requests
    uint256 public numTotalRequests;
    // Reentrancy lock
    uint256 internal _locked = 1;

    // Map of request counts for corresponding requester
    mapping(address => uint256) public mapRequestCounts;
    // Map of delivery counts for corresponding requester
    mapping(address => uint256) public mapDeliveryCounts;
    // Map of delivery counts for corresponding mech service multisig
    mapping(address => uint256) public mapMechServiceDeliveryCounts;
    // Mapping of request Id => mech delivery information
    mapping(uint256 => MechDelivery) public mapRequestIdDeliveries;
    // Mapping of account nonces
    mapping(address => uint256) public mapNonces;

    /// @dev MechMarketplace constructor.
    /// @param _stakingFactory Staking factory contract address.
    /// @param _karmaProxy Karma proxy contract address.
    /// @param _minResponseTimeout Min response time in sec.
    /// @param _maxResponseTimeout Max response time in sec.
    constructor(
        address _stakingFactory,
        address _karmaProxy,
        uint256 _minResponseTimeout,
        uint256 _maxResponseTimeout
    ) {
        // Check for zero address
        if (_stakingFactory == address(0) || _karmaProxy == address(0)) {
            revert ZeroAddress();
        }

        // Check for zero values
        if (_minResponseTimeout == 0 || _maxResponseTimeout == 0) {
            revert ZeroValue();
        }

        // Check for sanity values
        if (_minResponseTimeout > _maxResponseTimeout) {
            revert Overflow(_minResponseTimeout, _maxResponseTimeout);
        }

        // responseTimeout limits
        if (_maxResponseTimeout > type(uint32).max) {
            revert Overflow(_maxResponseTimeout, type(uint32).max);
        }

        stakingFactory = _stakingFactory;
        karmaProxy = _karmaProxy;
        minResponseTimeout = _minResponseTimeout;
        maxResponseTimeout = _maxResponseTimeout;

        // Record chain Id
        chainId = block.chainid;
        // Compute domain separator
        domainSeparator = _computeDomainSeparator();
    }

    /// @dev Computes domain separator hash.
    /// @return Hash of the domain separator based on its name, version, chain Id and contract address.
    function _computeDomainSeparator() internal view returns (bytes32) {
        return keccak256(
            abi.encode(
                DOMAIN_SEPARATOR_TYPE_HASH,
                keccak256("MechMarketplace"),
                keccak256(abi.encode(VERSION)),
                block.chainid,
                address(this)
            )
        );
    }

    /// @dev Registers a request.
    /// @notice The request is going to be registered by a specified priority agent mech.
    /// @param data Self-descriptive opaque data-blob.
    /// @param priorityMech Address of a priority mech.
    /// @param priorityMechStakingInstance Address of a priority mech staking instance.
    /// @param priorityMechServiceId Priority mech service Id.
    /// @param requesterStakingInstance Staking instance of a service whose multisig posts a request.
    /// @param requesterServiceId Corresponding service Id in the staking contract.
    /// @param responseTimeout Relative response time in sec.
    /// @return requestId Request Id.
    function request(
        bytes memory data,
        address priorityMech,
        address priorityMechStakingInstance,
        uint256 priorityMechServiceId,
        address requesterStakingInstance,
        uint256 requesterServiceId,
        uint256 responseTimeout
    ) external payable returns (uint256 requestId) {
        // Reentrancy guard
        if (_locked > 1) {
            revert ReentrancyGuard();
        }
        _locked = 2;

        // Check for zero address
        if (priorityMech == address(0) || priorityMechStakingInstance == address(0) ||
            requesterStakingInstance == address(0)) {
            revert ZeroAddress();
        }

        // Check that mech staking contract is different from requester one
        if (priorityMechStakingInstance == requesterStakingInstance) {
            revert UnauthorizedAccount(priorityMechStakingInstance);
        }

        // Check that msg.sender is not a mech
        if (msg.sender == priorityMech) {
            revert UnauthorizedAccount(msg.sender);
        }

        // responseTimeout bounds
        if (responseTimeout < minResponseTimeout || responseTimeout > maxResponseTimeout) {
            revert OutOfBounds(responseTimeout, minResponseTimeout, maxResponseTimeout);
        }
        // responseTimeout limits
        if (responseTimeout + block.timestamp > type(uint32).max) {
            revert Overflow(responseTimeout + block.timestamp, type(uint32).max);
        }

        // Check for non-zero data
        if (data.length == 0) {
            revert ZeroValue();
        }

        // Check agent mech
        checkMech(priorityMech, priorityMechStakingInstance, priorityMechServiceId);

        // Check requester
        checkRequester(msg.sender, requesterStakingInstance, requesterServiceId);

        // Get the request Id
        requestId = getRequestId(msg.sender, data, mapNonces[msg.sender]);

        // Update sender's nonce
        mapNonces[msg.sender]++;

        // Get mech delivery info struct
        MechDelivery storage mechDelivery = mapRequestIdDeliveries[requestId];

        // Record priorityMech and response timeout
        mechDelivery.priorityMech = priorityMech;
        // responseTimeout from relative time to absolute time
        mechDelivery.responseTimeout = uint32(responseTimeout + block.timestamp);
        // Record request account
        mechDelivery.requester = msg.sender;

        // Increase mech requester karma
        IKarma(karmaProxy).changeRequesterMechKarma(msg.sender, priorityMech, 1);

        // Record the request count
        mapRequestCounts[msg.sender]++;
        // Increase the number of undelivered requests
        numUndeliveredRequests++;
        // Increase the total number of requests
        numTotalRequests++;

        // Process request by a specified priority mech
        IMech(priorityMech).requestFromMarketplace{value: msg.value}(msg.sender, data, requestId);

        emit MarketplaceRequest(msg.sender, priorityMech, requestId, data);

        _locked = 1;
    }

    /// @dev Delivers a request.
    /// @notice This function can only be called by the agent mech delivering the request.
    /// @param requestId Request id.
    /// @param requestData Self-descriptive opaque data-blob.
    /// @param deliveryMechStakingInstance Delivery mech staking instance address.
    /// @param deliveryMechServiceId Mech service Id.
    function deliverMarketplace(
        uint256 requestId,
        bytes memory requestData,
        address deliveryMechStakingInstance,
        uint256 deliveryMechServiceId
    ) external {
        // Reentrancy guard
        if (_locked > 1) {
            revert ReentrancyGuard();
        }
        _locked = 2;

        // Check agent mech and get its mech service multisig
        address mechService = checkMech(msg.sender, deliveryMechStakingInstance, deliveryMechServiceId);

        // Get the staked service info for the mech
        IStaking.ServiceInfo memory serviceInfo =
            IStaking(deliveryMechStakingInstance).getServiceInfo(deliveryMechServiceId);
        // Check that staked service multisig is the priority mech mech service
        if (!IMech(msg.sender).isOperator(serviceInfo.multisig)) {
            revert UnauthorizedAccount(msg.sender);
        }

        // Get mech delivery info struct
        MechDelivery storage mechDelivery = mapRequestIdDeliveries[requestId];
        address priorityMech = mechDelivery.priorityMech;

        // Check for request existence
        if (priorityMech == address(0)) {
            revert ZeroAddress();
        }

        // Check that the delivery mech is not a requester
        address requester = mechDelivery.requester;
        if (msg.sender == requester) {
            revert UnauthorizedAccount(msg.sender);
        }

        // Check that the request is not already delivered
        if (mechDelivery.deliveryMech != address(0)) {
            revert AlreadyDelivered(requestId);
        }

        // If delivery mech is different from the priority one
        if (priorityMech != msg.sender) {
            // Within the defined response time only a chosen priority mech is able to deliver
            if (block.timestamp > mechDelivery.responseTimeout) {
                // Decrease priority mech karma as the mech did not deliver
                IKarma(karmaProxy).changeMechKarma(priorityMech, -1);
                // Revoke request from the priority mech
                IMech(priorityMech).revokeRequest(requestId);
            } else {
                // Priority mech responseTimeout is still >= block.timestamp
                revert PriorityMechResponseTimeout(mechDelivery.responseTimeout, block.timestamp);
            }
        }

        // Record the actual delivery mech
        mechDelivery.deliveryMech = msg.sender;

        // Decrease the number of undelivered requests
        numUndeliveredRequests--;
        // Increase the amount of requester delivered requests
        mapDeliveryCounts[requester]++;
        // Increase the amount of mech service multisig delivered requests
        mapMechServiceDeliveryCounts[mechService]++;

        // Increase mech karma that delivers the request
        IKarma(karmaProxy).changeMechKarma(msg.sender, 1);

        emit MarketplaceDeliver(priorityMech, msg.sender, requester, requestId, requestData);

        _locked = 1;
    }

    /// @dev Gets the already computed domain separator of recomputes one if the chain Id is different.
    /// @return Original or recomputed domain separator.
    function getDomainSeparator() public view returns (bytes32) {
        return block.chainid == chainId ? domainSeparator : _computeDomainSeparator();
    }

    /// @dev Gets the request Id.
    /// @param account Account address.
    /// @param data Self-descriptive opaque data-blob.
    /// @param nonce Nonce.
    /// @return requestId Corresponding request Id.
    function getRequestId(
        address account,
        bytes memory data,
        uint256 nonce
    ) public view returns (uint256 requestId) {
        requestId = uint256(keccak256(
            abi.encodePacked(
                "\x19\x01",
                getDomainSeparator(),
                keccak256(
                    abi.encode(
                        account,
                        data,
                        nonce
                    )
                )
            )
        ));
    }

    /// @dev Checks for staking instance contract validity.
    /// @param stakingInstance Staking instance address.
    /// @param serviceId Service Id.
    function checkStakingInstance(address stakingInstance, uint256 serviceId) public view {
        // Check that the mech staking instance is valid
        if (!IStakingFactory(stakingFactory).verifyInstance(stakingInstance)) {
            revert UnauthorizedAccount(stakingInstance);
        }

        // Check if the mech service is staked
        IStaking.StakingState state = IStaking(stakingInstance).getStakingState(serviceId);
        if (state != IStaking.StakingState.Staked) {
            revert ServiceNotStaked(stakingInstance, serviceId);
        }
    }

    /// @dev Checks for mech validity.
    /// @dev mech Agent mech contract address.
    /// @param mechStakingInstance Agent mech staking instance address.
    /// @param mechServiceId Agent mech service Id.
    /// @return Service multisig address.
    function checkMech(address mech, address mechStakingInstance, uint256 mechServiceId) public view returns (address){
        // Check staking instance
        checkStakingInstance(mechStakingInstance, mechServiceId);

        // Get the staked service info for the mech
        IStaking.ServiceInfo memory serviceInfo = IStaking(mechStakingInstance).getServiceInfo(mechServiceId);
        // Check that staked service multisig is the priority mech service multisig
        if (!IMech(mech).isOperator(serviceInfo.multisig)) {
            revert UnauthorizedAccount(mech);
        }

        return serviceInfo.multisig;
    }

    /// @dev Checks for requester validity.
    /// @dev requester Requester contract address.
    /// @param requesterStakingInstance Requester staking instance address.
    /// @param requesterServiceId Requester service Id.
    function checkRequester(address requester, address requesterStakingInstance, uint256 requesterServiceId) public view {
        // Check staking instance
        checkStakingInstance(requesterStakingInstance, requesterServiceId);

        // Get the requester staked service info
        IStaking.ServiceInfo memory serviceInfo = IStaking(requesterStakingInstance).getServiceInfo(requesterServiceId);
        // Check staked service multisig
        if (serviceInfo.multisig != requester) {
            revert OwnerOnly(requester, serviceInfo.multisig);
        }
    }

    /// @dev Gets the request Id status.
    /// @param requestId Request Id.
    /// @return status Request status.
    function getRequestStatus(uint256 requestId) external view returns (RequestStatus status) {
        // Request exists if it has a record in the mapRequestIdDeliveries
        MechDelivery memory mechDelivery = mapRequestIdDeliveries[requestId];
        if (mechDelivery.priorityMech != address(0)) {
            // Check if the request Id was already delivered: delivery mech address is not zero
            if (mechDelivery.deliveryMech == address(0)) {
                if (block.timestamp > mechDelivery.responseTimeout) {
                    status = RequestStatus.RequestedExpired;
                } else {
                    status = RequestStatus.RequestedPriority;
                }
            } else {
                status = RequestStatus.Delivered;
            }
        }
    }

    /// @dev Gets the requests count for a specific account.
    /// @param account Account address.
    /// @return Requests count.
    function getRequestsCount(address account) external view returns (uint256) {
        return mapRequestCounts[account];
    }

    /// @dev Gets the deliveries count for a specific account.
    /// @param account Account address.
    /// @return Deliveries count.
    function getDeliveriesCount(address account) external view returns (uint256) {
        return mapDeliveryCounts[account];
    }

    /// @dev Gets deliveries count for a specific mech service multisig.
    /// @param mechService Agent mech service multisig address.
    /// @return Deliveries count.
    function getMechServiceDeliveriesCount(address mechService) external view returns (uint256) {
        return mapMechServiceDeliveryCounts[mechService];
    }

    /// @dev Gets mech delivery info.
    /// @param requestId Request Id.
    /// @return Mech delivery info.
    function getMechDeliveryInfo(uint256 requestId) external view returns (MechDelivery memory) {
        return mapRequestIdDeliveries[requestId];
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "evmVersion": "cancun",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_stakingFactory","type":"address"},{"internalType":"address","name":"_karmaProxy","type":"address"},{"internalType":"uint256","name":"_minResponseTimeout","type":"uint256"},{"internalType":"uint256","name":"_maxResponseTimeout","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"AlreadyDelivered","type":"error"},{"inputs":[{"internalType":"uint256","name":"provided","type":"uint256"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"OutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"provided","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Overflow","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"OwnerOnly","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"current","type":"uint256"}],"name":"PriorityMechResponseTimeout","type":"error"},{"inputs":[],"name":"ReentrancyGuard","type":"error"},{"inputs":[{"internalType":"address","name":"stakingInstance","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"ServiceNotStaked","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"UnauthorizedAccount","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"}],"name":"FactoryUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"priorityMech","type":"address"},{"indexed":true,"internalType":"address","name":"actualMech","type":"address"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"MarketplaceDeliver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":true,"internalType":"address","name":"requestedMech","type":"address"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"MarketplaceRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"mech","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"MechRegistrationStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minResponseTimeout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxResponseTimeout","type":"uint256"}],"name":"MinMaxResponseTimeoutUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR_TYPE_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mech","type":"address"},{"internalType":"address","name":"mechStakingInstance","type":"address"},{"internalType":"uint256","name":"mechServiceId","type":"uint256"}],"name":"checkMech","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"requester","type":"address"},{"internalType":"address","name":"requesterStakingInstance","type":"address"},{"internalType":"uint256","name":"requesterServiceId","type":"uint256"}],"name":"checkRequester","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakingInstance","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"checkStakingInstance","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"bytes","name":"requestData","type":"bytes"},{"internalType":"address","name":"deliveryMechStakingInstance","type":"address"},{"internalType":"uint256","name":"deliveryMechServiceId","type":"uint256"}],"name":"deliverMarketplace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getDeliveriesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"getMechDeliveryInfo","outputs":[{"components":[{"internalType":"address","name":"priorityMech","type":"address"},{"internalType":"address","name":"deliveryMech","type":"address"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint32","name":"responseTimeout","type":"uint32"}],"internalType":"struct MechDelivery","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mechService","type":"address"}],"name":"getMechServiceDeliveriesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"getRequestId","outputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"getRequestStatus","outputs":[{"internalType":"enum MechMarketplace.RequestStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRequestsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"karmaProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapDeliveryCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapMechServiceDeliveryCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapNonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapRequestCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapRequestIdDeliveries","outputs":[{"internalType":"address","name":"priorityMech","type":"address"},{"internalType":"address","name":"deliveryMech","type":"address"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint32","name":"responseTimeout","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxResponseTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minResponseTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTotalRequests","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numUndeliveredRequests","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"priorityMech","type":"address"},{"internalType":"address","name":"priorityMechStakingInstance","type":"address"},{"internalType":"uint256","name":"priorityMechServiceId","type":"uint256"},{"internalType":"address","name":"requesterStakingInstance","type":"address"},{"internalType":"uint256","name":"requesterServiceId","type":"uint256"},{"internalType":"uint256","name":"responseTimeout","type":"uint256"}],"name":"request","outputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"stakingFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6101406040526001600255348015610015575f80fd5b506040516125f93803806125f983398101604081905261003491610215565b6001600160a01b038416158061005157506001600160a01b038316155b1561006f5760405163d92e233d60e01b815260040160405180910390fd5b81158061007a575080155b1561009857604051637c946ed760e01b815260040160405180910390fd5b808211156100c857604051637ae5968560e01b815260048101839052602481018290526044015b60405180910390fd5b63ffffffff8111156100fa57604051637ae5968560e01b81526004810182905263ffffffff60248201526044016100bf565b6001600160a01b038085166101205283166101005260c082905260e08190524660a052610125610132565b6080525061028a92505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ff376b6313a0837eb351511248cfe7dcc1cd26c49b8e0a47e1eb369dd62c425db604051806040016040528060058152602001640312e302e360dc1b8152506040516020016101a39190610255565b60408051601f1981840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80516001600160a01b0381168114610210575f80fd5b919050565b5f805f8060808587031215610228575f80fd5b610231856101fa565b935061023f602086016101fa565b6040860151606090960151949790965092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516122e26103175f395f81816102ec015261082701525f81816101f601528181610eb2015281816110c4015261189401525f81816105e7015281816115de015261165a01525f818161026f015281816115b5015261163401525f81816104600152611afd01525f818161076b0152611b3201526122e25ff3fe6080604052600436106101a3575f3560e01c80638fb847ef116100e7578063d8a4676f11610087578063f2e433bf11610062578063f2e433bf1461061d578063f5dcb7bb14610727578063f698da251461075a578063ffa1ad741461078d575f80fd5b8063d8a4676f146105aa578063ded81286146105d6578063ed24911d14610609575f80fd5b8063ad16ee73116100c2578063ad16ee73146104a1578063bdf86317146104b4578063cb261bec146104c8578063cbd6407a1461057f575f80fd5b80638fb847ef1461040e5780639a8a05921461044f5780639ec4a5bf14610482575f80fd5b8063291347681161015257806356d0819e1161012d57806356d0819e1461034e57806360b24e0a1461036d57806371db00c4146103ae5780637af73473146103cd575f80fd5b806329134768146102db57806343be96431461030e5780634ada3e6114610339575f80fd5b80630f41196a116101825780630f41196a1461025e5780631a4d8fc8146102915780631bbbeeb8146102b0575f80fd5b8062427c54146101a757806305217332146101e55780630ed8078b1461023d575b5f80fd5b3480156101b2575f80fd5b506101d26101c1366004611c76565b60046020525f908152604090205481565b6040519081526020015b60405180910390f35b3480156101f0575f80fd5b506102187f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dc565b348015610248575f80fd5b5061025c610257366004611c98565b6107e2565b005b348015610269575f80fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b34801561029c575f80fd5b5061025c6102ab366004611cc2565b6109e3565b3480156102bb575f80fd5b506101d26102ca366004611c76565b60036020525f908152604090205481565b3480156102e6575f80fd5b506102187f000000000000000000000000000000000000000000000000000000000000000081565b348015610319575f80fd5b506101d2610328366004611c76565b60056020525f908152604090205481565b348015610344575f80fd5b506101d260015481565b348015610359575f80fd5b5061025c610368366004611e2f565b610b2f565b348015610378575f80fd5b506101d2610387366004611c76565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b3480156103b9575f80fd5b506102186103c8366004611cc2565b6111be565b3480156103d8575f80fd5b506101d26103e7366004611c76565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b348015610419575f80fd5b506101d2610428366004611c76565b73ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090205490565b34801561045a575f80fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b34801561048d575f80fd5b506101d261049c366004611e8c565b611362565b6101d26104af366004611ee1565b611416565b3480156104bf575f80fd5b506101d25f5481565b3480156104d3575f80fd5b5061053c6104e2366004611f6e565b60066020525f908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff9182169282169181169074010000000000000000000000000000000000000000900463ffffffff1684565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152919093169082015263ffffffff90911660608201526080016101dc565b34801561058a575f80fd5b506101d2610599366004611c76565b60076020525f908152604090205481565b3480156105b5575f80fd5b506105c96105c4366004611f6e565b611a30565b6040516101dc9190611fb2565b3480156105e1575f80fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b348015610614575f80fd5b506101d2611afa565b348015610628575f80fd5b506106d4610637366004611f6e565b604080516080810182525f808252602082018190529181018290526060810191909152505f908152600660209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff908116825260018301548116938201939093526002909101549182169281019290925274010000000000000000000000000000000000000000900463ffffffff16606082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff908116825260208085015182169083015283830151169181019190915260609182015163ffffffff16918101919091526080016101dc565b348015610732575f80fd5b506101d27f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b348015610765575f80fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b348015610798575f80fd5b506107d56040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dc919061203d565b6040517f479e372e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063479e372e90602401602060405180830381865afa15801561086c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610890919061204f565b6108e3576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b6040517ffd0bba8c000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff84169063fd0bba8c90602401602060405180830381865afa15801561094e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610972919061206e565b9050600181600281111561098857610988611f85565b146109de576040517fcaf8924d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016108da565b505050565b6109ed82826107e2565b6040517f82a8ea58000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff8416906382a8ea58906024015f60405180830381865afa158015610a57573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a9c919081019061208c565b90508373ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1614610b295780516040517fa43d6ada00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483015290911660248201526044016108da565b50505050565b60016002541115610b6c576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280555f610b7c3384846111be565b6040517f82a8ea58000000000000000000000000000000000000000000000000000000008152600481018490529091505f9073ffffffffffffffffffffffffffffffffffffffff8516906382a8ea58906024015f60405180830381865afa158015610be9573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c2e919081019061208c565b80516040517f6d70f7ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201529091503390636d70f7ae90602401602060405180830381865afa158015610c9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc0919061204f565b610cf8576040517f32b2baa30000000000000000000000000000000000000000000000000000000081523360048201526024016108da565b5f868152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff1680610d54576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282015473ffffffffffffffffffffffffffffffffffffffff1633819003610dab576040517f32b2baa30000000000000000000000000000000000000000000000000000000081523360048201526024016108da565b600183015473ffffffffffffffffffffffffffffffffffffffff1615610e00576040517f5b7e8301000000000000000000000000000000000000000000000000000000008152600481018a90526024016108da565b73ffffffffffffffffffffffffffffffffffffffff82163314610fe657600283015474010000000000000000000000000000000000000000900463ffffffff16421115610f89576040517f4225d37a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f00000000000000000000000000000000000000000000000000000000000000001690634225d37a906044015f604051808303815f87803b158015610ef3575f80fd5b505af1158015610f05573d5f803e3d5ffd5b50506040517fe7d915cf000000000000000000000000000000000000000000000000000000008152600481018c905273ffffffffffffffffffffffffffffffffffffffff8516925063e7d915cf91506024015f604051808303815f87803b158015610f6e575f80fd5b505af1158015610f80573d5f803e3d5ffd5b50505050610fe6565b60028301546040517f177d0c790000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910463ffffffff1660048201524260248201526044016108da565b6001830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555f80549080611020836121ca565b909155505073ffffffffffffffffffffffffffffffffffffffff81165f908152600460205260408120805491611055836121fe565b909155505073ffffffffffffffffffffffffffffffffffffffff85165f90815260056020526040812080549161108a836121fe565b90915550506040517f4225d37a000000000000000000000000000000000000000000000000000000008152336004820152600160248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634225d37a906044015f604051808303815f87803b15801561111a575f80fd5b505af115801561112c573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc0ecbc77097bb637f0b6fa34f169d87906113c1c45a0227113d36cdbae936fc48c8c6040516111a6929190612235565b60405180910390a45050600160025550505050505050565b5f6111c983836107e2565b6040517f82a8ea58000000000000000000000000000000000000000000000000000000008152600481018390525f9073ffffffffffffffffffffffffffffffffffffffff8516906382a8ea58906024015f60405180830381865afa158015611233573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611278919081019061208c565b80516040517f6d70f7ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152919250861690636d70f7ae90602401602060405180830381865afa1580156112e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130b919061204f565b611359576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016108da565b51949350505050565b5f61136b611afa565b84848460405160200161138093929190612255565b604051602081830303815290604052805190602001206040516020016113d89291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b5f60016002541115611454576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805573ffffffffffffffffffffffffffffffffffffffff8716158061148f575073ffffffffffffffffffffffffffffffffffffffff8616155b806114ae575073ffffffffffffffffffffffffffffffffffffffff8416155b156114e5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611562576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024016108da565b73ffffffffffffffffffffffffffffffffffffffff871633036115b3576040517f32b2baa30000000000000000000000000000000000000000000000000000000081523360048201526024016108da565b7f000000000000000000000000000000000000000000000000000000000000000082108061160057507f000000000000000000000000000000000000000000000000000000000000000082115b15611686576040517feb373cfe000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000000000000000000000000000000000000000000060248201527f000000000000000000000000000000000000000000000000000000000000000060448201526064016108da565b63ffffffff6116954284612293565b11156116e5576116a54283612293565b6040517f7ae59685000000000000000000000000000000000000000000000000000000008152600481019190915263ffffffff60248201526044016108da565b87515f0361171f576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61172a8787876111be565b506117363385856109e3565b335f8181526007602052604090205461175191908a90611362565b335f90815260076020526040812080549293509061176e836121fe565b90915550505f81815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161781556117c84284612293565b600282018054337fffffffffffffffff0000000000000000000000000000000000000000000000009091167401000000000000000000000000000000000000000063ffffffff94909416939093027fffffffffffffffffffffffff00000000000000000000000000000000000000001692909217821790556040517f55e7d044000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff8981166024830152600160448301527f000000000000000000000000000000000000000000000000000000000000000016906355e7d044906064015f604051808303815f87803b1580156118d5575f80fd5b505af11580156118e7573d5f803e3d5ffd5b5050335f908152600360205260408120805493509150611906836121fe565b90915550505f80549080611919836121fe565b909155505060018054905f61192d836121fe565b90915550506040517f7941251800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891690637941251890349061198a9033908e908890600401612255565b5f604051808303818588803b1580156119a1575f80fd5b505af11580156119b3573d5f803e3d5ffd5b50505050508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4827c9fc8074fe94dd4939d4228739ff43d7072a6504a6f413ffa4967c120175848c604051611a17929190612235565b60405180910390a3506001600255979650505050505050565b5f8181526006602090815260408083208151608081018352815473ffffffffffffffffffffffffffffffffffffffff90811680835260018401548216958301959095526002909201549182169281019290925274010000000000000000000000000000000000000000900463ffffffff1660608201529015611af457602081015173ffffffffffffffffffffffffffffffffffffffff16611aef57806060015163ffffffff16421115611ae65760029150611af4565b60019150611af4565b600391505b50919050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614611b2f57611b2a611b54565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ff376b6313a0837eb351511248cfe7dcc1cd26c49b8e0a47e1eb369dd62c425db6040518060400160405280600581526020017f312e302e30000000000000000000000000000000000000000000000000000000815250604051602001611bdd919061203d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff81168114611c73575f80fd5b50565b5f60208284031215611c86575f80fd5b8135611c9181611c52565b9392505050565b5f8060408385031215611ca9575f80fd5b8235611cb481611c52565b946020939093013593505050565b5f805f60608486031215611cd4575f80fd5b8335611cdf81611c52565b92506020840135611cef81611c52565b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715611d5057611d50611d00565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9d57611d9d611d00565b604052919050565b5f82601f830112611db4575f80fd5b813567ffffffffffffffff811115611dce57611dce611d00565b611dff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d56565b818152846020838601011115611e13575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611e42575f80fd5b84359350602085013567ffffffffffffffff811115611e5f575f80fd5b611e6b87828801611da5565b9350506040850135611e7c81611c52565b9396929550929360600135925050565b5f805f60608486031215611e9e575f80fd5b8335611ea981611c52565b9250602084013567ffffffffffffffff811115611ec4575f80fd5b611ed086828701611da5565b925050604084013590509250925092565b5f805f805f805f60e0888a031215611ef7575f80fd5b873567ffffffffffffffff811115611f0d575f80fd5b611f198a828b01611da5565b9750506020880135611f2a81611c52565b95506040880135611f3a81611c52565b9450606088013593506080880135611f5181611c52565b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215611f7e575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160048310611feb577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f611c916020830184611ff1565b5f6020828403121561205f575f80fd5b81518015158114611c91575f80fd5b5f6020828403121561207e575f80fd5b815160038110611c91575f80fd5b5f602080838503121561209d575f80fd5b825167ffffffffffffffff808211156120b4575f80fd5b9084019060c082870312156120c7575f80fd5b6120cf611d2d565b82516120da81611c52565b8152828401516120e981611c52565b818501526040830151828111156120fe575f80fd5b8301601f8101881361210e575f80fd5b80518381111561212057612120611d00565b8060051b9350612131868501611d56565b818152938201860193868101908a86111561214a575f80fd5b928701925b858410156121685783518252928701929087019061214f565b80604086015250505050606083015160608201526080830151608082015260a083015160a08201528094505050505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f816121d8576121d861219d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222e5761222e61219d565b5060010190565b828152604060208201525f61224d6040830184611ff1565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f6122836060830185611ff1565b9050826040830152949350505050565b808201808211156122a6576122a661219d565b9291505056fea26469706673582212201b268d67d946fcbfb68be06571dc81fa0c6d733a38c051d9e67d27014ef8108a64736f6c63430008190033000000000000000000000000b0228ca253a88bc8eb4ca70bcac8f87b381f47000000000000000000000000004e3e48ba826b15214fde72a50bfd17ab286b584e000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000012c

Deployed Bytecode

0x6080604052600436106101a3575f3560e01c80638fb847ef116100e7578063d8a4676f11610087578063f2e433bf11610062578063f2e433bf1461061d578063f5dcb7bb14610727578063f698da251461075a578063ffa1ad741461078d575f80fd5b8063d8a4676f146105aa578063ded81286146105d6578063ed24911d14610609575f80fd5b8063ad16ee73116100c2578063ad16ee73146104a1578063bdf86317146104b4578063cb261bec146104c8578063cbd6407a1461057f575f80fd5b80638fb847ef1461040e5780639a8a05921461044f5780639ec4a5bf14610482575f80fd5b8063291347681161015257806356d0819e1161012d57806356d0819e1461034e57806360b24e0a1461036d57806371db00c4146103ae5780637af73473146103cd575f80fd5b806329134768146102db57806343be96431461030e5780634ada3e6114610339575f80fd5b80630f41196a116101825780630f41196a1461025e5780631a4d8fc8146102915780631bbbeeb8146102b0575f80fd5b8062427c54146101a757806305217332146101e55780630ed8078b1461023d575b5f80fd5b3480156101b2575f80fd5b506101d26101c1366004611c76565b60046020525f908152604090205481565b6040519081526020015b60405180910390f35b3480156101f0575f80fd5b506102187f0000000000000000000000004e3e48ba826b15214fde72a50bfd17ab286b584e81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dc565b348015610248575f80fd5b5061025c610257366004611c98565b6107e2565b005b348015610269575f80fd5b506101d27f000000000000000000000000000000000000000000000000000000000000003c81565b34801561029c575f80fd5b5061025c6102ab366004611cc2565b6109e3565b3480156102bb575f80fd5b506101d26102ca366004611c76565b60036020525f908152604090205481565b3480156102e6575f80fd5b506102187f000000000000000000000000b0228ca253a88bc8eb4ca70bcac8f87b381f470081565b348015610319575f80fd5b506101d2610328366004611c76565b60056020525f908152604090205481565b348015610344575f80fd5b506101d260015481565b348015610359575f80fd5b5061025c610368366004611e2f565b610b2f565b348015610378575f80fd5b506101d2610387366004611c76565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b3480156103b9575f80fd5b506102186103c8366004611cc2565b6111be565b3480156103d8575f80fd5b506101d26103e7366004611c76565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b348015610419575f80fd5b506101d2610428366004611c76565b73ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090205490565b34801561045a575f80fd5b506101d27f000000000000000000000000000000000000000000000000000000000000006481565b34801561048d575f80fd5b506101d261049c366004611e8c565b611362565b6101d26104af366004611ee1565b611416565b3480156104bf575f80fd5b506101d25f5481565b3480156104d3575f80fd5b5061053c6104e2366004611f6e565b60066020525f908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff9182169282169181169074010000000000000000000000000000000000000000900463ffffffff1684565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152919093169082015263ffffffff90911660608201526080016101dc565b34801561058a575f80fd5b506101d2610599366004611c76565b60076020525f908152604090205481565b3480156105b5575f80fd5b506105c96105c4366004611f6e565b611a30565b6040516101dc9190611fb2565b3480156105e1575f80fd5b506101d27f000000000000000000000000000000000000000000000000000000000000012c81565b348015610614575f80fd5b506101d2611afa565b348015610628575f80fd5b506106d4610637366004611f6e565b604080516080810182525f808252602082018190529181018290526060810191909152505f908152600660209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff908116825260018301548116938201939093526002909101549182169281019290925274010000000000000000000000000000000000000000900463ffffffff16606082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff908116825260208085015182169083015283830151169181019190915260609182015163ffffffff16918101919091526080016101dc565b348015610732575f80fd5b506101d27f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b348015610765575f80fd5b506101d27fe43e3493e7370b5abb7b8352d49af9cd1e304a8d640d6e194b61daaf9ae90d7081565b348015610798575f80fd5b506107d56040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dc919061203d565b6040517f479e372e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000b0228ca253a88bc8eb4ca70bcac8f87b381f4700169063479e372e90602401602060405180830381865afa15801561086c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610890919061204f565b6108e3576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b6040517ffd0bba8c000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff84169063fd0bba8c90602401602060405180830381865afa15801561094e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610972919061206e565b9050600181600281111561098857610988611f85565b146109de576040517fcaf8924d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016108da565b505050565b6109ed82826107e2565b6040517f82a8ea58000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff8416906382a8ea58906024015f60405180830381865afa158015610a57573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a9c919081019061208c565b90508373ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1614610b295780516040517fa43d6ada00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483015290911660248201526044016108da565b50505050565b60016002541115610b6c576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280555f610b7c3384846111be565b6040517f82a8ea58000000000000000000000000000000000000000000000000000000008152600481018490529091505f9073ffffffffffffffffffffffffffffffffffffffff8516906382a8ea58906024015f60405180830381865afa158015610be9573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c2e919081019061208c565b80516040517f6d70f7ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201529091503390636d70f7ae90602401602060405180830381865afa158015610c9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc0919061204f565b610cf8576040517f32b2baa30000000000000000000000000000000000000000000000000000000081523360048201526024016108da565b5f868152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff1680610d54576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282015473ffffffffffffffffffffffffffffffffffffffff1633819003610dab576040517f32b2baa30000000000000000000000000000000000000000000000000000000081523360048201526024016108da565b600183015473ffffffffffffffffffffffffffffffffffffffff1615610e00576040517f5b7e8301000000000000000000000000000000000000000000000000000000008152600481018a90526024016108da565b73ffffffffffffffffffffffffffffffffffffffff82163314610fe657600283015474010000000000000000000000000000000000000000900463ffffffff16421115610f89576040517f4225d37a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000004e3e48ba826b15214fde72a50bfd17ab286b584e1690634225d37a906044015f604051808303815f87803b158015610ef3575f80fd5b505af1158015610f05573d5f803e3d5ffd5b50506040517fe7d915cf000000000000000000000000000000000000000000000000000000008152600481018c905273ffffffffffffffffffffffffffffffffffffffff8516925063e7d915cf91506024015f604051808303815f87803b158015610f6e575f80fd5b505af1158015610f80573d5f803e3d5ffd5b50505050610fe6565b60028301546040517f177d0c790000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910463ffffffff1660048201524260248201526044016108da565b6001830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555f80549080611020836121ca565b909155505073ffffffffffffffffffffffffffffffffffffffff81165f908152600460205260408120805491611055836121fe565b909155505073ffffffffffffffffffffffffffffffffffffffff85165f90815260056020526040812080549161108a836121fe565b90915550506040517f4225d37a000000000000000000000000000000000000000000000000000000008152336004820152600160248201527f0000000000000000000000004e3e48ba826b15214fde72a50bfd17ab286b584e73ffffffffffffffffffffffffffffffffffffffff1690634225d37a906044015f604051808303815f87803b15801561111a575f80fd5b505af115801561112c573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc0ecbc77097bb637f0b6fa34f169d87906113c1c45a0227113d36cdbae936fc48c8c6040516111a6929190612235565b60405180910390a45050600160025550505050505050565b5f6111c983836107e2565b6040517f82a8ea58000000000000000000000000000000000000000000000000000000008152600481018390525f9073ffffffffffffffffffffffffffffffffffffffff8516906382a8ea58906024015f60405180830381865afa158015611233573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611278919081019061208c565b80516040517f6d70f7ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152919250861690636d70f7ae90602401602060405180830381865afa1580156112e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130b919061204f565b611359576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016108da565b51949350505050565b5f61136b611afa565b84848460405160200161138093929190612255565b604051602081830303815290604052805190602001206040516020016113d89291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b5f60016002541115611454576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805573ffffffffffffffffffffffffffffffffffffffff8716158061148f575073ffffffffffffffffffffffffffffffffffffffff8616155b806114ae575073ffffffffffffffffffffffffffffffffffffffff8416155b156114e5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611562576040517f32b2baa300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024016108da565b73ffffffffffffffffffffffffffffffffffffffff871633036115b3576040517f32b2baa30000000000000000000000000000000000000000000000000000000081523360048201526024016108da565b7f000000000000000000000000000000000000000000000000000000000000003c82108061160057507f000000000000000000000000000000000000000000000000000000000000012c82115b15611686576040517feb373cfe000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000000000000000000000000000000000000000003c60248201527f000000000000000000000000000000000000000000000000000000000000012c60448201526064016108da565b63ffffffff6116954284612293565b11156116e5576116a54283612293565b6040517f7ae59685000000000000000000000000000000000000000000000000000000008152600481019190915263ffffffff60248201526044016108da565b87515f0361171f576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61172a8787876111be565b506117363385856109e3565b335f8181526007602052604090205461175191908a90611362565b335f90815260076020526040812080549293509061176e836121fe565b90915550505f81815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161781556117c84284612293565b600282018054337fffffffffffffffff0000000000000000000000000000000000000000000000009091167401000000000000000000000000000000000000000063ffffffff94909416939093027fffffffffffffffffffffffff00000000000000000000000000000000000000001692909217821790556040517f55e7d044000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff8981166024830152600160448301527f0000000000000000000000004e3e48ba826b15214fde72a50bfd17ab286b584e16906355e7d044906064015f604051808303815f87803b1580156118d5575f80fd5b505af11580156118e7573d5f803e3d5ffd5b5050335f908152600360205260408120805493509150611906836121fe565b90915550505f80549080611919836121fe565b909155505060018054905f61192d836121fe565b90915550506040517f7941251800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891690637941251890349061198a9033908e908890600401612255565b5f604051808303818588803b1580156119a1575f80fd5b505af11580156119b3573d5f803e3d5ffd5b50505050508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4827c9fc8074fe94dd4939d4228739ff43d7072a6504a6f413ffa4967c120175848c604051611a17929190612235565b60405180910390a3506001600255979650505050505050565b5f8181526006602090815260408083208151608081018352815473ffffffffffffffffffffffffffffffffffffffff90811680835260018401548216958301959095526002909201549182169281019290925274010000000000000000000000000000000000000000900463ffffffff1660608201529015611af457602081015173ffffffffffffffffffffffffffffffffffffffff16611aef57806060015163ffffffff16421115611ae65760029150611af4565b60019150611af4565b600391505b50919050565b5f7f00000000000000000000000000000000000000000000000000000000000000644614611b2f57611b2a611b54565b905090565b507fe43e3493e7370b5abb7b8352d49af9cd1e304a8d640d6e194b61daaf9ae90d7090565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ff376b6313a0837eb351511248cfe7dcc1cd26c49b8e0a47e1eb369dd62c425db6040518060400160405280600581526020017f312e302e30000000000000000000000000000000000000000000000000000000815250604051602001611bdd919061203d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff81168114611c73575f80fd5b50565b5f60208284031215611c86575f80fd5b8135611c9181611c52565b9392505050565b5f8060408385031215611ca9575f80fd5b8235611cb481611c52565b946020939093013593505050565b5f805f60608486031215611cd4575f80fd5b8335611cdf81611c52565b92506020840135611cef81611c52565b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715611d5057611d50611d00565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9d57611d9d611d00565b604052919050565b5f82601f830112611db4575f80fd5b813567ffffffffffffffff811115611dce57611dce611d00565b611dff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d56565b818152846020838601011115611e13575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611e42575f80fd5b84359350602085013567ffffffffffffffff811115611e5f575f80fd5b611e6b87828801611da5565b9350506040850135611e7c81611c52565b9396929550929360600135925050565b5f805f60608486031215611e9e575f80fd5b8335611ea981611c52565b9250602084013567ffffffffffffffff811115611ec4575f80fd5b611ed086828701611da5565b925050604084013590509250925092565b5f805f805f805f60e0888a031215611ef7575f80fd5b873567ffffffffffffffff811115611f0d575f80fd5b611f198a828b01611da5565b9750506020880135611f2a81611c52565b95506040880135611f3a81611c52565b9450606088013593506080880135611f5181611c52565b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215611f7e575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160048310611feb577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f611c916020830184611ff1565b5f6020828403121561205f575f80fd5b81518015158114611c91575f80fd5b5f6020828403121561207e575f80fd5b815160038110611c91575f80fd5b5f602080838503121561209d575f80fd5b825167ffffffffffffffff808211156120b4575f80fd5b9084019060c082870312156120c7575f80fd5b6120cf611d2d565b82516120da81611c52565b8152828401516120e981611c52565b818501526040830151828111156120fe575f80fd5b8301601f8101881361210e575f80fd5b80518381111561212057612120611d00565b8060051b9350612131868501611d56565b818152938201860193868101908a86111561214a575f80fd5b928701925b858410156121685783518252928701929087019061214f565b80604086015250505050606083015160608201526080830151608082015260a083015160a08201528094505050505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f816121d8576121d861219d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222e5761222e61219d565b5060010190565b828152604060208201525f61224d6040830184611ff1565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f6122836060830185611ff1565b9050826040830152949350505050565b808201808211156122a6576122a661219d565b9291505056fea26469706673582212201b268d67d946fcbfb68be06571dc81fa0c6d733a38c051d9e67d27014ef8108a64736f6c63430008190033

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

000000000000000000000000b0228ca253a88bc8eb4ca70bcac8f87b381f47000000000000000000000000004e3e48ba826b15214fde72a50bfd17ab286b584e000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000012c

-----Decoded View---------------
Arg [0] : _stakingFactory (address): 0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700
Arg [1] : _karmaProxy (address): 0x4E3e48bA826b15214FDe72a50BFd17aB286B584E
Arg [2] : _minResponseTimeout (uint256): 60
Arg [3] : _maxResponseTimeout (uint256): 300

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b0228ca253a88bc8eb4ca70bcac8f87b381f4700
Arg [1] : 0000000000000000000000004e3e48ba826b15214fde72a50bfd17ab286b584e
Arg [2] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [3] : 000000000000000000000000000000000000000000000000000000000000012c


Block Transaction Gas Used Reward
view all blocks validated

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