obsidian-desci_Obsidian-Desci/artifacts/ExampleClient2.json
2024-10-28 07:25:46 -07:00

348 lines
63 KiB
JSON

{
"address": "0x1b3A590C6c9be95C83155E73aE1972D1c7e40140",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "dealId",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "dataId",
"type": "string"
}
],
"name": "JobCompleted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "message",
"type": "string"
}
],
"name": "JobCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_jobID",
"type": "uint256"
}
],
"name": "getJobResult",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_jobManagerAddress",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "message",
"type": "string"
}
],
"name": "runCowsay",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_jobManagerAddress",
"type": "address"
}
],
"name": "setJobManagerAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "string",
"name": "dealId",
"type": "string"
},
{
"internalType": "string",
"name": "dataId",
"type": "string"
}
],
"name": "submitResults",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"transactionHash": "0xe5a9b186fd6393f406cec7e52c323161d6db3024f8ddf0a499691f81584c5429",
"receipt": {
"to": null,
"from": "0x23f318fAe637F7F7081D71d2ECD62cb62D27ac4f",
"contractAddress": "0xA943d77aA8669975643c98b8cB4c337d3C7eEb6a",
"transactionIndex": 48,
"gasUsed": "1212230",
"logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000004000000000000000000000000020000000000000000000800000000000000000000000000000000400001000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000",
"blockHash": "0x484ba5643cf9c66df2c230f1b1678a82fe290963b57edbe07a5d61ce50df82f5",
"transactionHash": "0xe5a9b186fd6393f406cec7e52c323161d6db3024f8ddf0a499691f81584c5429",
"logs": [
{
"transactionIndex": 48,
"blockNumber": 4609903,
"transactionHash": "0xe5a9b186fd6393f406cec7e52c323161d6db3024f8ddf0a499691f81584c5429",
"address": "0xA943d77aA8669975643c98b8cB4c337d3C7eEb6a",
"topics": [
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x00000000000000000000000023f318fae637f7f7081d71d2ecd62cb62d27ac4f"
],
"data": "0x",
"logIndex": 26,
"blockHash": "0x484ba5643cf9c66df2c230f1b1678a82fe290963b57edbe07a5d61ce50df82f5"
}
],
"blockNumber": 4609903,
"cumulativeGasUsed": "6363929",
"status": 1,
"byzantium": true
},
"args": [],
"numDeployments": 1,
"solcInputHash": "26a3d6e19028b7f1dccb6c7997bc34c1",
"metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"}],\"name\":\"JobCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"JobCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_jobID\",\"type\":\"uint256\"}],\"name\":\"getJobResult\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobManagerAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"runCowsay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobManagerAddress\",\"type\":\"address\"}],\"name\":\"setJobManagerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"}],\"name\":\"submitResults\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ExampleClient.sol\":\"ExampleClient\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/ExampleClient.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"./ILilypadJobManager.sol\\\";\\nimport \\\"./ILilypadJobClient.sol\\\";\\n\\ncontract ExampleClient is Ownable, Initializable, ILilypadJobClient {\\n\\n address private jobManagerAddress;\\n ILilypadJobManager private jobManagerContract;\\n\\n mapping(uint256 => string) private jobResults;\\n\\n event JobCreated(\\n uint256 id,\\n string message\\n );\\n\\n event JobCompleted(\\n uint256 id,\\n string dealId,\\n string dataId\\n );\\n\\n function initialize(address _jobManagerAddress) public initializer {\\n setJobManagerAddress(_jobManagerAddress);\\n }\\n\\n function setJobManagerAddress(address _jobManagerAddress) public onlyOwner {\\n require(_jobManagerAddress != address(0), \\\"Job manager address\\\");\\n jobManagerAddress = _jobManagerAddress;\\n jobManagerContract = ILilypadJobManager(jobManagerAddress);\\n }\\n\\n function getJobResult(uint256 _jobID) public view returns (string memory) {\\n return jobResults[_jobID];\\n }\\n\\n function runCowsay(\\n string memory message\\n ) public {\\n string[] memory inputs = new string[](1);\\n inputs[0] = string(abi.encodePacked(\\\"Message=\\\", message));\\n uint256 id = jobManagerContract.runJob(\\n \\\"cowsay:v0.0.1\\\",\\n inputs,\\n msg.sender\\n );\\n\\n emit JobCreated(\\n id,\\n message\\n );\\n }\\n\\n function submitResults(\\n uint256 id,\\n string memory dealId,\\n string memory dataId\\n ) public override {\\n jobResults[id] = dataId;\\n emit JobCompleted(\\n id,\\n dealId,\\n dataId\\n );\\n }\\n}\\n\",\"keccak256\":\"0xdc18a57d551a2f5b0ea4d923b785f5d34beef1d34fb8c98d5404be472ad5e7af\",\"license\":\"Apache-2.0\"},\"contracts/ILilypadJobClient.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.6;\\n\\n// a smart contract that is running a job\\n// it will call the IOnChainJobManager with it's job\\n// which will end up with the resultsAdded function being called by the manager\\ninterface ILilypadJobClient {\\n function submitResults(\\n uint256 id,\\n string memory dealId,\\n string memory dataId\\n ) external;\\n}\\n\",\"keccak256\":\"0xbdb36ace8c31e47b30abaa2ce713cec8f488f9dfaac50c7372a5f5196cc3dfcc\",\"license\":\"Apache-2.0\"},\"contracts/ILilypadJobManager.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.6;\\n\\nimport \\\"./SharedStructs.sol\\\";\\nimport \\\"./ILilypadJobClient.sol\\\";\\n\\n// the smart contract that is responsible for handling the life\\n// cycle of a job - it will pay the registered solver to manage the job\\n// this is the simple implementation - later we can implement the whole protocol\\n// where the calling smart contract can decide if it wants to agree to a resource offer\\n// and accept results\\ninterface ILilypadJobManager is ILilypadJobClient {\\n function runJob(\\n string memory module,\\n string[] memory inputs,\\n address payee\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0x8c65176e0bfbdc3a612317b719475acb409910d43d1fd73420f0af18b7fd1cd5\",\"license\":\"Apache-2.0\"},\"contracts/SharedStructs.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.6;\\n\\nlibrary SharedStructs {\\n\\n enum ServiceType {\\n Solver,\\n Mediator,\\n ResourceProvider,\\n JobCreator\\n }\\n\\n enum AgreementState {\\n\\n // the two parties have not yet both agreed to the deal\\n DealNegotiating,\\n\\n // both parties have agreed\\n DealAgreed,\\n\\n // results have been submitted by the RP\\n ResultsSubmitted,\\n\\n // the JC has accepted the results\\n ResultsAccepted,\\n\\n // the JC has checked the results\\n ResultsChecked,\\n\\n // a mediator has accepted the results\\n MediationAccepted,\\n\\n // a mediator has rejected the results\\n MediationRejected,\\n\\n // this means the counter-party did not agree to the deal in time\\n TimeoutAgree,\\n\\n // this means the RP did not submit results in time\\n TimeoutSubmitResults,\\n\\n // this means the JC did not accept or reject results in time\\n TimeoutJudgeResults,\\n\\n // this means the mediator did not accept or submit judgement in time\\n TimeoutMediateResults\\n\\n }\\n\\n // we map addresses onto infomation about the user\\n struct User {\\n address userAddress;\\n // the CID of information for this user\\n string metadataCID;\\n string url;\\n ServiceType[] roles;\\n }\\n\\n // the various addresses involved in runnig a deal\\n struct DealMembers {\\n // the address of the solver service that the RP and JC have agreed to use\\n address solver;\\n // the addresses of the RP and JC that have agreed to this deal\\n address jobCreator;\\n address resourceProvider;\\n // the list of mediators that the RP and JC have agreed to use\\n address[] mediators;\\n }\\n\\n // a timeout represents the agreed amount of time and the penalty\\n // that is applied if the timeout is exceeded \\n struct DealTimeout {\\n uint256 timeout;\\n uint256 collateral;\\n }\\n \\n // the various forms of timeout a deal can have\\n struct DealTimeouts { \\n DealTimeout agree;\\n DealTimeout submitResults;\\n DealTimeout judgeResults;\\n DealTimeout mediateResults;\\n }\\n\\n // configure the cost of a deal\\n struct DealPricing {\\n // agreed price per instruction\\n uint256 instructionPrice;\\n\\n // the collateral that the JC has put up to pay for the job\\n // the final cost of the job will be deducted from this\\n uint256 paymentCollateral;\\n\\n // how much collateral the RP will post to attest it's results are correct\\n // this is a multiple of the cost of the job which is known at results\\n // submission time\\n uint256 resultsCollateralMultiple;\\n\\n // how much is the JC willing to pay the mediator to resolve disputes\\n uint256 mediationFee;\\n }\\n\\n // a Deal forms the information that is agreed between both parties\\n // both parties must have called \\\"agree_deal\\\" with the exact\\n // same parameters before the deal is considered valid\\n // a Deal is immutable - nothing about it can be updated\\n struct Deal {\\n // the CID of the Deal document on IPFS (and directory service)\\n // this contains the job spec, the job offer and the resource offer\\n string dealId;\\n\\n // who is participating in this deal\\n DealMembers members;\\n \\n // the timeout settings for a deal\\n DealTimeouts timeouts;\\n\\n // the pricing settings for a deal\\n DealPricing pricing; \\n }\\n\\n // what the RP submits back once having run the job\\n // this is also immutable\\n struct Result {\\n // the id of the deal that this result is for\\n string dealId;\\n\\n // the CID of the results on IPFS (and directory service)\\n // NOTE - this is not the CID of actual results data rather\\n // of the JSON object reporting that data\\n string resultsId;\\n\\n // this is the actual lower level data CID\\n string dataId;\\n\\n // how many instructions were executed by the RP\\n uint256 instructionCount;\\n }\\n\\n // an agreement keeps track of the state of a deal and it's fields can be mutated\\n struct Agreement {\\n // the current state of the agreement\\n AgreementState state;\\n\\n uint256 resourceProviderAgreedAt;\\n uint256 jobCreatorAgreedAt;\\n uint256 dealCreatedAt;\\n uint256 dealAgreedAt;\\n\\n uint256 resultsSubmittedAt;\\n uint256 resultsAcceptedAt;\\n uint256 resultsCheckedAt;\\n\\n uint256 mediationAcceptedAt;\\n uint256 mediationRejectedAt;\\n\\n uint256 timeoutAgreeAt;\\n uint256 timeoutSubmitResultsAt;\\n uint256 timeoutJudgeResultsAt;\\n uint256 timeoutMediateResultsAt;\\n }\\n\\n struct JobOffer {\\n uint256 id;\\n \\n // this is the contract that will be triggered\\n // once there are some results\\n address calling_contract;\\n\\n // this is the address that is paying for the job\\n // they must have called approve on the token contract\\n // and granted the solver address the number of tokens\\n // required\\n address payee;\\n\\n // the job spec\\n string module;\\n string[] inputs;\\n }\\n}\\n\",\"keccak256\":\"0x17ae1fe0274d61f5460caee95e214371a378a3e49730e5bdc4833506de99fcb6\",\"license\":\"Apache-2.0\"}},\"version\":1}",
"bytecode": "0x608060405234801561000f575f80fd5b5061002c61002161003160201b60201c565b61003860201b60201c565b6100f9565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611481806101065f395ff3fe608060405234801561000f575f80fd5b5060043610610086575f3560e01c8063c4d66de811610059578063c4d66de8146100fe578063cabc00d11461011a578063ec67df4c14610136578063f2fde38b1461015257610086565b80633b89dcab1461008a5780636c0f1f58146100ba578063715018a6146100d65780638da5cb5b146100e0575b5f80fd5b6100a4600480360381019061009f919061089c565b61016e565b6040516100b19190610951565b60405180910390f35b6100d460048036038101906100cf9190610a9d565b61020f565b005b6100de61026e565b005b6100e8610281565b6040516100f59190610b64565b60405180910390f35b61011860048036038101906101139190610ba7565b6102a8565b005b610134600480360381019061012f9190610bd2565b6103e7565b005b610150600480360381019061014b9190610ba7565b610554565b005b61016c60048036038101906101679190610ba7565b61066e565b005b606060035f8381526020019081526020015f20805461018c90610c46565b80601f01602080910402602001604051908101604052809291908181526020018280546101b890610c46565b80156102035780601f106101da57610100808354040283529160200191610203565b820191905f5260205f20905b8154815290600101906020018083116101e657829003601f168201915b50505050509050919050565b8060035f8581526020019081526020015f20908161022d9190610e13565b507f3849c58b4b39b379bddc5973e71a10ded174f54140916d81986c7eec092e5c4283838360405161026193929190610ef1565b60405180910390a1505050565b6102766106f0565b61027f5f61076e565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8060159054906101000a900460ff161590508080156102d9575060015f60149054906101000a900460ff1660ff16105b8061030757506102e83061082f565b158015610306575060015f60149054906101000a900460ff1660ff16145b5b610346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033d90610fa4565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156103825760015f60156101000a81548160ff0219169083151502179055505b61038b82610554565b80156103e3575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516103da9190611007565b60405180910390a15b5050565b5f600167ffffffffffffffff81111561040357610402610979565b5b60405190808252806020026020018201604052801561043657816020015b60608152602001906001900390816104215790505b5090508160405160200161044a91906110a4565b604051602081830303815290604052815f8151811061046c5761046b6110c5565b5b60200260200101819052505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c75555fa83336040518363ffffffff1660e01b81526004016104d492919061123f565b6020604051808303815f875af11580156104f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105149190611294565b90507fb63f0fdfb200b05c8b95fb4dcf8f8abd30f0b6884d532792e705afab4f37380a81846040516105479291906112bf565b60405180910390a1505050565b61055c6106f0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c190611337565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106766106f0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db906113c5565b60405180910390fd5b6106ed8161076e565b50565b6106f8610851565b73ffffffffffffffffffffffffffffffffffffffff16610716610281565b73ffffffffffffffffffffffffffffffffffffffff161461076c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107639061142d565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61087b81610869565b8114610885575f80fd5b50565b5f8135905061089681610872565b92915050565b5f602082840312156108b1576108b0610861565b5b5f6108be84828501610888565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156108fe5780820151818401526020810190506108e3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610923826108c7565b61092d81856108d1565b935061093d8185602086016108e1565b61094681610909565b840191505092915050565b5f6020820190508181035f8301526109698184610919565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6109af82610909565b810181811067ffffffffffffffff821117156109ce576109cd610979565b5b80604052505050565b5f6109e0610858565b90506109ec82826109a6565b919050565b5f67ffffffffffffffff821115610a0b57610a0a610979565b5b610a1482610909565b9050602081019050919050565b828183375f83830152505050565b5f610a41610a3c846109f1565b6109d7565b905082815260208101848484011115610a5d57610a5c610975565b5b610a68848285610a21565b509392505050565b5f82601f830112610a8457610a83610971565b5b8135610a94848260208601610a2f565b91505092915050565b5f805f60608486031215610ab457610ab3610861565b5b5f610ac186828701610888565b935050602084013567ffffffffffffffff811115610ae257610ae1610865565b5b610aee86828701610a70565b925050604084013567ffffffffffffffff811115610b0f57610b0e610865565b5b610b1b86828701610a70565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b4e82610b25565b9050919050565b610b5e81610b44565b82525050565b5f602082019050610b775f830184610b55565b92915050565b610b8681610b44565b8114610b90575f80fd5b50565b5f81359050610ba181610b7d565b92915050565b5f60208284031215610bbc57610bbb610861565b5b5f610bc984828501610b93565b91505092915050565b5f60208284031215610be757610be6610861565b5b5f82013567ffffffffffffffff811115610c0457610c03610865565b5b610c1084828501610a70565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610c5d57607f821691505b602082108103610c7057610c6f610c19565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610cd27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c97565b610cdc8683610c97565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610d17610d12610d0d84610869565b610cf4565b610869565b9050919050565b5f819050919050565b610d3083610cfd565b610d44610d3c82610d1e565b848454610ca3565b825550505050565b5f90565b610d58610d4c565b610d63818484610d27565b505050565b5b81811015610d8657610d7b5f82610d50565b600181019050610d69565b5050565b601f821115610dcb57610d9c81610c76565b610da584610c88565b81016020851015610db4578190505b610dc8610dc085610c88565b830182610d68565b50505b505050565b5f82821c905092915050565b5f610deb5f1984600802610dd0565b1980831691505092915050565b5f610e038383610ddc565b9150826002028217905092915050565b610e1c826108c7565b67ffffffffffffffff811115610e3557610e34610979565b5b610e3f8254610c46565b610e4a828285610d8a565b5f60209050601f831160018114610e7b575f8415610e69578287015190505b610e738582610df8565b865550610eda565b601f198416610e8986610c76565b5f5b82811015610eb057848901518255600182019150602085019450602081019050610e8b565b86831015610ecd5784890151610ec9601f891682610ddc565b8355505b6001600288020188555050505b505050505050565b610eeb81610869565b82525050565b5f606082019050610f045f830186610ee2565b8181036020830152610f168185610919565b90508181036040830152610f2a8184610919565b9050949350505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f610f8e602e836108d1565b9150610f9982610f34565b604082019050919050565b5f6020820190508181035f830152610fbb81610f82565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f610ff1610fec610fe784610fc2565b610cf4565b610fcb565b9050919050565b61100181610fd7565b82525050565b5f60208201905061101a5f830184610ff8565b92915050565b5f81905092915050565b7f4d6573736167653d0000000000000000000000000000000000000000000000005f82015250565b5f61105e600883611020565b91506110698261102a565b600882019050919050565b5f61107e826108c7565b6110888185611020565b93506110988185602086016108e1565b80840191505092915050565b5f6110ae82611052565b91506110ba8284611074565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f636f777361793a76302e302e31000000000000000000000000000000000000005f82015250565b5f611126600d836108d1565b9150611131826110f2565b602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f61117f826108c7565b6111898185611165565b93506111998185602086016108e1565b6111a281610909565b840191505092915050565b5f6111b88383611175565b905092915050565b5f602082019050919050565b5f6111d68261113c565b6111e08185611146565b9350836020820285016111f285611156565b805f5b8581101561122d578484038952815161120e85826111ad565b9450611219836111c0565b925060208a019950506001810190506111f5565b50829750879550505050505092915050565b5f6060820190508181035f8301526112568161111a565b9050818103602083015261126a81856111cc565b90506112796040830184610b55565b9392505050565b5f8151905061128e81610872565b92915050565b5f602082840312156112a9576112a8610861565b5b5f6112b684828501611280565b91505092915050565b5f6040820190506112d25f830185610ee2565b81810360208301526112e48184610919565b90509392505050565b7f4a6f62206d616e616765722061646472657373000000000000000000000000005f82015250565b5f6113216013836108d1565b915061132c826112ed565b602082019050919050565b5f6020820190508181035f83015261134e81611315565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6113af6026836108d1565b91506113ba82611355565b604082019050919050565b5f6020820190508181035f8301526113dc816113a3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6114176020836108d1565b9150611422826113e3565b602082019050919050565b5f6020820190508181035f8301526114448161140b565b905091905056fea2646970667358221220e70512fad6a4309e5f14fc3cfa8d43307e2e07c61bd54386b69e7e5424682b7164736f6c63430008150033",
"deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610086575f3560e01c8063c4d66de811610059578063c4d66de8146100fe578063cabc00d11461011a578063ec67df4c14610136578063f2fde38b1461015257610086565b80633b89dcab1461008a5780636c0f1f58146100ba578063715018a6146100d65780638da5cb5b146100e0575b5f80fd5b6100a4600480360381019061009f919061089c565b61016e565b6040516100b19190610951565b60405180910390f35b6100d460048036038101906100cf9190610a9d565b61020f565b005b6100de61026e565b005b6100e8610281565b6040516100f59190610b64565b60405180910390f35b61011860048036038101906101139190610ba7565b6102a8565b005b610134600480360381019061012f9190610bd2565b6103e7565b005b610150600480360381019061014b9190610ba7565b610554565b005b61016c60048036038101906101679190610ba7565b61066e565b005b606060035f8381526020019081526020015f20805461018c90610c46565b80601f01602080910402602001604051908101604052809291908181526020018280546101b890610c46565b80156102035780601f106101da57610100808354040283529160200191610203565b820191905f5260205f20905b8154815290600101906020018083116101e657829003601f168201915b50505050509050919050565b8060035f8581526020019081526020015f20908161022d9190610e13565b507f3849c58b4b39b379bddc5973e71a10ded174f54140916d81986c7eec092e5c4283838360405161026193929190610ef1565b60405180910390a1505050565b6102766106f0565b61027f5f61076e565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8060159054906101000a900460ff161590508080156102d9575060015f60149054906101000a900460ff1660ff16105b8061030757506102e83061082f565b158015610306575060015f60149054906101000a900460ff1660ff16145b5b610346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033d90610fa4565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156103825760015f60156101000a81548160ff0219169083151502179055505b61038b82610554565b80156103e3575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516103da9190611007565b60405180910390a15b5050565b5f600167ffffffffffffffff81111561040357610402610979565b5b60405190808252806020026020018201604052801561043657816020015b60608152602001906001900390816104215790505b5090508160405160200161044a91906110a4565b604051602081830303815290604052815f8151811061046c5761046b6110c5565b5b60200260200101819052505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c75555fa83336040518363ffffffff1660e01b81526004016104d492919061123f565b6020604051808303815f875af11580156104f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105149190611294565b90507fb63f0fdfb200b05c8b95fb4dcf8f8abd30f0b6884d532792e705afab4f37380a81846040516105479291906112bf565b60405180910390a1505050565b61055c6106f0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c190611337565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106766106f0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db906113c5565b60405180910390fd5b6106ed8161076e565b50565b6106f8610851565b73ffffffffffffffffffffffffffffffffffffffff16610716610281565b73ffffffffffffffffffffffffffffffffffffffff161461076c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107639061142d565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61087b81610869565b8114610885575f80fd5b50565b5f8135905061089681610872565b92915050565b5f602082840312156108b1576108b0610861565b5b5f6108be84828501610888565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156108fe5780820151818401526020810190506108e3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610923826108c7565b61092d81856108d1565b935061093d8185602086016108e1565b61094681610909565b840191505092915050565b5f6020820190508181035f8301526109698184610919565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6109af82610909565b810181811067ffffffffffffffff821117156109ce576109cd610979565b5b80604052505050565b5f6109e0610858565b90506109ec82826109a6565b919050565b5f67ffffffffffffffff821115610a0b57610a0a610979565b5b610a1482610909565b9050602081019050919050565b828183375f83830152505050565b5f610a41610a3c846109f1565b6109d7565b905082815260208101848484011115610a5d57610a5c610975565b5b610a68848285610a21565b509392505050565b5f82601f830112610a8457610a83610971565b5b8135610a94848260208601610a2f565b91505092915050565b5f805f60608486031215610ab457610ab3610861565b5b5f610ac186828701610888565b935050602084013567ffffffffffffffff811115610ae257610ae1610865565b5b610aee86828701610a70565b925050604084013567ffffffffffffffff811115610b0f57610b0e610865565b5b610b1b86828701610a70565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b4e82610b25565b9050919050565b610b5e81610b44565b82525050565b5f602082019050610b775f830184610b55565b92915050565b610b8681610b44565b8114610b90575f80fd5b50565b5f81359050610ba181610b7d565b92915050565b5f60208284031215610bbc57610bbb610861565b5b5f610bc984828501610b93565b91505092915050565b5f60208284031215610be757610be6610861565b5b5f82013567ffffffffffffffff811115610c0457610c03610865565b5b610c1084828501610a70565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610c5d57607f821691505b602082108103610c7057610c6f610c19565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610cd27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c97565b610cdc8683610c97565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610d17610d12610d0d84610869565b610cf4565b610869565b9050919050565b5f819050919050565b610d3083610cfd565b610d44610d3c82610d1e565b848454610ca3565b825550505050565b5f90565b610d58610d4c565b610d63818484610d27565b505050565b5b81811015610d8657610d7b5f82610d50565b600181019050610d69565b5050565b601f821115610dcb57610d9c81610c76565b610da584610c88565b81016020851015610db4578190505b610dc8610dc085610c88565b830182610d68565b50505b505050565b5f82821c905092915050565b5f610deb5f1984600802610dd0565b1980831691505092915050565b5f610e038383610ddc565b9150826002028217905092915050565b610e1c826108c7565b67ffffffffffffffff811115610e3557610e34610979565b5b610e3f8254610c46565b610e4a828285610d8a565b5f60209050601f831160018114610e7b575f8415610e69578287015190505b610e738582610df8565b865550610eda565b601f198416610e8986610c76565b5f5b82811015610eb057848901518255600182019150602085019450602081019050610e8b565b86831015610ecd5784890151610ec9601f891682610ddc565b8355505b6001600288020188555050505b505050505050565b610eeb81610869565b82525050565b5f606082019050610f045f830186610ee2565b8181036020830152610f168185610919565b90508181036040830152610f2a8184610919565b9050949350505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f610f8e602e836108d1565b9150610f9982610f34565b604082019050919050565b5f6020820190508181035f830152610fbb81610f82565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f610ff1610fec610fe784610fc2565b610cf4565b610fcb565b9050919050565b61100181610fd7565b82525050565b5f60208201905061101a5f830184610ff8565b92915050565b5f81905092915050565b7f4d6573736167653d0000000000000000000000000000000000000000000000005f82015250565b5f61105e600883611020565b91506110698261102a565b600882019050919050565b5f61107e826108c7565b6110888185611020565b93506110988185602086016108e1565b80840191505092915050565b5f6110ae82611052565b91506110ba8284611074565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f636f777361793a76302e302e31000000000000000000000000000000000000005f82015250565b5f611126600d836108d1565b9150611131826110f2565b602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f61117f826108c7565b6111898185611165565b93506111998185602086016108e1565b6111a281610909565b840191505092915050565b5f6111b88383611175565b905092915050565b5f602082019050919050565b5f6111d68261113c565b6111e08185611146565b9350836020820285016111f285611156565b805f5b8581101561122d578484038952815161120e85826111ad565b9450611219836111c0565b925060208a019950506001810190506111f5565b50829750879550505050505092915050565b5f6060820190508181035f8301526112568161111a565b9050818103602083015261126a81856111cc565b90506112796040830184610b55565b9392505050565b5f8151905061128e81610872565b92915050565b5f602082840312156112a9576112a8610861565b5b5f6112b684828501611280565b91505092915050565b5f6040820190506112d25f830185610ee2565b81810360208301526112e48184610919565b90509392505050565b7f4a6f62206d616e616765722061646472657373000000000000000000000000005f82015250565b5f6113216013836108d1565b915061132c826112ed565b602082019050919050565b5f6020820190508181035f83015261134e81611315565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6113af6026836108d1565b91506113ba82611355565b604082019050919050565b5f6020820190508181035f8301526113dc816113a3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6114176020836108d1565b9150611422826113e3565b602082019050919050565b5f6020820190508181035f8301526114448161140b565b905091905056fea2646970667358221220e70512fad6a4309e5f14fc3cfa8d43307e2e07c61bd54386b69e7e5424682b7164736f6c63430008150033",
"devdoc": {
"events": {
"Initialized(uint8)": {
"details": "Triggered when the contract has been initialized or reinitialized."
}
},
"kind": "dev",
"methods": {
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
},
"storageLayout": {
"storage": [
{
"astId": 506,
"contract": "contracts/ExampleClient.sol:ExampleClient",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
},
{
"astId": 6,
"contract": "contracts/ExampleClient.sol:ExampleClient",
"label": "_initialized",
"offset": 20,
"slot": "0",
"type": "t_uint8"
},
{
"astId": 9,
"contract": "contracts/ExampleClient.sol:ExampleClient",
"label": "_initializing",
"offset": 21,
"slot": "0",
"type": "t_bool"
},
{
"astId": 1571,
"contract": "contracts/ExampleClient.sol:ExampleClient",
"label": "jobManagerAddress",
"offset": 0,
"slot": "1",
"type": "t_address"
},
{
"astId": 1574,
"contract": "contracts/ExampleClient.sol:ExampleClient",
"label": "jobManagerContract",
"offset": 0,
"slot": "2",
"type": "t_contract(ILilypadJobManager)1816"
},
{
"astId": 1578,
"contract": "contracts/ExampleClient.sol:ExampleClient",
"label": "jobResults",
"offset": 0,
"slot": "3",
"type": "t_mapping(t_uint256,t_string_storage)"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
},
"t_bool": {
"encoding": "inplace",
"label": "bool",
"numberOfBytes": "1"
},
"t_contract(ILilypadJobManager)1816": {
"encoding": "inplace",
"label": "contract ILilypadJobManager",
"numberOfBytes": "20"
},
"t_mapping(t_uint256,t_string_storage)": {
"encoding": "mapping",
"key": "t_uint256",
"label": "mapping(uint256 => string)",
"numberOfBytes": "32",
"value": "t_string_storage"
},
"t_string_storage": {
"encoding": "bytes",
"label": "string",
"numberOfBytes": "32"
},
"t_uint256": {
"encoding": "inplace",
"label": "uint256",
"numberOfBytes": "32"
},
"t_uint8": {
"encoding": "inplace",
"label": "uint8",
"numberOfBytes": "1"
}
}
}
}