diff --git a/contracts/Marketplace.sol b/contracts/Marketplace.sol index 558769e..ed67679 100644 --- a/contracts/Marketplace.sol +++ b/contracts/Marketplace.sol @@ -4,15 +4,13 @@ pragma solidity ^0.8.8; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import "./Requests.sol"; import "./Collateral.sol"; import "./Proofs.sol"; contract Marketplace is Collateral, Proofs { using EnumerableSet for EnumerableSet.Bytes32Set; - type RequestId is bytes32; - type SlotId is bytes32; - uint256 public immutable collateral; MarketplaceFunds private funds; mapping(RequestId => Request) private requests; @@ -433,39 +431,6 @@ contract Marketplace is Collateral, Proofs { return RequestId.unwrap(a) != bytes32(b); } - struct Request { - address client; - Ask ask; - Content content; - uint256 expiry; // time at which this request expires - bytes32 nonce; // random nonce to differentiate between similar requests - } - - struct Ask { - uint64 slots; // the number of requested slots - uint256 slotSize; // amount of storage per slot (in number of bytes) - uint256 duration; // how long content should be stored (in seconds) - uint256 proofProbability; // how often storage proofs are required - uint256 reward; // amount of tokens paid per second per slot to hosts - uint64 maxSlotLoss; // Max slots that can be lost without data considered to be lost - } - - struct Content { - string cid; // content id (if part of a larger set, the chunk cid) - Erasure erasure; // Erasure coding attributes - PoR por; // Proof of Retrievability parameters - } - - struct Erasure { - uint64 totalChunks; // the total number of chunks in the larger data set - } - - struct PoR { - bytes u; // parameters u_1..u_s - bytes publicKey; // public key - bytes name; // random name - } - enum RequestState { New, // [default] waiting to fill slots Started, // all slots filled, accepting regular proofs diff --git a/contracts/Requests.sol b/contracts/Requests.sol new file mode 100644 index 0000000..1ba6dd1 --- /dev/null +++ b/contracts/Requests.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.8; + +type RequestId is bytes32; +type SlotId is bytes32; + +struct Request { + address client; + Ask ask; + Content content; + uint256 expiry; // time at which this request expires + bytes32 nonce; // random nonce to differentiate between similar requests +} + +struct Ask { + uint64 slots; // the number of requested slots + uint256 slotSize; // amount of storage per slot (in number of bytes) + uint256 duration; // how long content should be stored (in seconds) + uint256 proofProbability; // how often storage proofs are required + uint256 reward; // amount of tokens paid per second per slot to hosts + uint64 maxSlotLoss; // Max slots that can be lost without data considered to be lost +} + +struct Content { + string cid; // content id (if part of a larger set, the chunk cid) + Erasure erasure; // Erasure coding attributes + PoR por; // Proof of Retrievability parameters +} + +struct Erasure { + uint64 totalChunks; // the total number of chunks in the larger data set +} + +struct PoR { + bytes u; // parameters u_1..u_s + bytes publicKey; // public key + bytes name; // random name +}