Source Code
Overview
XDAI Balance
XDAI Value
$0.00Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 44327790 | 20 secs ago | 0.01 XDAI | ||||
| 44327790 | 20 secs ago | 0.01 XDAI | ||||
| 44327789 | 25 secs ago | 0.01 XDAI | ||||
| 44327789 | 25 secs ago | 0.01 XDAI | ||||
| 44327781 | 1 min ago | 0.01 XDAI | ||||
| 44327781 | 1 min ago | 0.01 XDAI | ||||
| 44327754 | 3 mins ago | 0.01 XDAI | ||||
| 44327754 | 3 mins ago | 0.01 XDAI | ||||
| 44327752 | 3 mins ago | 0.01 XDAI | ||||
| 44327752 | 3 mins ago | 0.01 XDAI | ||||
| 44327748 | 3 mins ago | 0.01 XDAI | ||||
| 44327748 | 3 mins ago | 0.01 XDAI | ||||
| 44327730 | 5 mins ago | 0.01 XDAI | ||||
| 44327730 | 5 mins ago | 0.01 XDAI | ||||
| 44327699 | 7 mins ago | 0.01 XDAI | ||||
| 44327699 | 7 mins ago | 0.01 XDAI | ||||
| 44327692 | 8 mins ago | 0.01 XDAI | ||||
| 44327692 | 8 mins ago | 0.01 XDAI | ||||
| 44327687 | 8 mins ago | 0.01 XDAI | ||||
| 44327687 | 8 mins ago | 0.01 XDAI | ||||
| 44327686 | 9 mins ago | 0.01 XDAI | ||||
| 44327686 | 9 mins ago | 0.01 XDAI | ||||
| 44327672 | 10 mins ago | 0.01 XDAI | ||||
| 44327672 | 10 mins ago | 0.01 XDAI | ||||
| 44327660 | 11 mins ago | 0.01 XDAI |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MechMarketplace
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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];
}
}{
"optimizer": {
"enabled": true,
"runs": 1000000
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in XDAI
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.