From 8e9605747811043678606221037d28fc9fdb876f Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:00:17 -0400 Subject: [PATCH 01/14] Update marketplace.md --- specs/marketplace.md | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 46954f9..2522d19 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -1,5 +1,4 @@ -# Codex Marketplace Spec - +--- title: CODEX-MARKETPLACE name: Codex Storage Marketplace status: raw @@ -14,13 +13,27 @@ contributors: ## Abstract -Codex Marketplace and its interactions are defined by a smart contract deployed on an EVM-compatible blockchain. This specification describes these interactions for the various roles within the network. +Codex Marketplace and its interactions are defined by a smart contract deployed on an EVM-compatible blockchain. +This specification describes these interactions for the various roles within the network. The document is intended for implementors of Codex nodes. +## Motivation + +The Codex network aims to create a peer-to-peer storage engine with robust data durability, data persistence guarantees, and a comprehensive incentive structure. + +The marketplace is a critical component of the Codex network, serving as a platform where all involved parties interact to ensure data persistence. It provides mechanisms to enforce agreements and facilitate data repair when SPs fail to fulfill their duties. + +Implemented as a smart contract on an EVM-compatible blockchain, the marketplace enables various scenarios where nodes assume one or more roles to maintain a reliable persistence layer for users. This specification details these interactions. + +The marketplace contract manages storage requests, maintains the state of allocated storage slots, and orchestrates SP rewards, collaterals, and storage proofs. + +A node that wishes to participate in the Codex persistence layer MUST implement one or more roles described in this document. + ## Semantics -The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [2119](https://www.ietf.org/rfc/rfc2119.txt). +The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [2119](https://www.ietf.org/rfc/rfc2119.txt). ### Definitions @@ -34,17 +47,6 @@ The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL N | Smart Contract | A smart contract implementing the marketplace functionality. | | Token | ERC20-based token used within the Codex network. | -## Motivation - -The Codex network aims to create a peer-to-peer storage engine with robust data durability, data persistence guarantees, and a comprehensive incentive structure. - -The marketplace is a critical component of the Codex network, serving as a platform where all involved parties interact to ensure data persistence. It provides mechanisms to enforce agreements and facilitate data repair when SPs fail to fulfill their duties. - -Implemented as a smart contract on an EVM-compatible blockchain, the marketplace enables various scenarios where nodes assume one or more roles to maintain a reliable persistence layer for users. This specification details these interactions. - -The marketplace contract manages storage requests, maintains the state of allocated storage slots, and orchestrates SP rewards, collaterals, and storage proofs. - -A node that wishes to participate in the Codex persistence layer MUST implement one or more roles described in this document. ### Roles From 318801188c56241fef5db268434867f1418e5d8e Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Wed, 25 Sep 2024 00:09:26 -0400 Subject: [PATCH 02/14] Update marketplace.md --- specs/marketplace.md | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 2522d19..2613cc6 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -20,20 +20,18 @@ The document is intended for implementors of Codex nodes. ## Motivation -The Codex network aims to create a peer-to-peer storage engine with robust data durability, data persistence guarantees, and a comprehensive incentive structure. +The Codex network aims to create a peer-to-peer storage engine with robust data durability, +data persistence guarantees, and a comprehensive incentive structure. -The marketplace is a critical component of the Codex network, serving as a platform where all involved parties interact to ensure data persistence. It provides mechanisms to enforce agreements and facilitate data repair when SPs fail to fulfill their duties. +The marketplace is a critical component of the Codex network, +serving as a platform where all involved parties interact to ensure data persistence. +It provides mechanisms to enforce agreements and +facilitate data repair when storage providers, wil be abbrivated to SP in this document, +fail to fulfill their duties. -Implemented as a smart contract on an EVM-compatible blockchain, the marketplace enables various scenarios where nodes assume one or more roles to maintain a reliable persistence layer for users. This specification details these interactions. - -The marketplace contract manages storage requests, maintains the state of allocated storage slots, and orchestrates SP rewards, collaterals, and storage proofs. - -A node that wishes to participate in the Codex persistence layer MUST implement one or more roles described in this document. - -## Semantics - -The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, -“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [2119](https://www.ietf.org/rfc/rfc2119.txt). +Implemented as a smart contract on an EVM-compatible blockchain, +the marketplace enables various scenarios where nodes assume one or +more roles to maintain a reliable persistence layer for users. ### Definitions @@ -47,6 +45,16 @@ The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL N | Smart Contract | A smart contract implementing the marketplace functionality. | | Token | ERC20-based token used within the Codex network. | +## Semantics + +The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [2119](https://www.ietf.org/rfc/rfc2119.txt). + +The marketplace contract manages storage requests, +maintains the state of allocated storage slots, and orchestrates SP rewards, +collaterals, and storage proofs. +A node that wishes to participate in the Codex persistence layer MUST implement one or +more roles described in this document. ### Roles @@ -54,9 +62,13 @@ A node can assume one of the three main roles in the network: the client, SP, an A client is a potentially short-lived node in the network with the purpose of persisting its data in the Codex persistence layer. -An SP is a long-lived node providing storage for clients in exchange for profit. To ensure a reliable, robust service for clients, SPs are required to periodically provide proofs that they are persisting the data. +An SP is a long-lived node providing storage for clients in exchange for profit. +To ensure a reliable, robust service for clients, +SPs are required to periodically provide proofs that they are persisting the data. A validator ensures that SPs have submitted valid proofs each period where the smart contract required a proof to be submitted for slots filled by the SP. +A validator may be a long-lived or short-lived node. +This role does not get penalized if deciding not to be a long-lived node. ## Storage Request Lifecycle From a3fd1c871ca163cd93b66e84c65c3cb174fa2075 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:48:15 -0400 Subject: [PATCH 03/14] Add files via upload --- specs/images/file8.png | Bin 0 -> 135100 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 specs/images/file8.png diff --git a/specs/images/file8.png b/specs/images/file8.png new file mode 100644 index 0000000000000000000000000000000000000000..d7ecca58dc5c5246bcfe0bb32eb14019d70838f5 GIT binary patch literal 135100 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

ZM0BC0d)#8}TCSI=4p=CUe!M{1@%I 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 z∓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 Date: Wed, 25 Sep 2024 22:13:49 -0400 Subject: [PATCH 04/14] Update marketplace.md --- specs/marketplace.md | 324 +++++++++++++++++++++++-------------------- 1 file changed, 177 insertions(+), 147 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 2613cc6..670af56 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -74,7 +74,184 @@ This role does not get penalized if deciding not to be a long-lived node. The diagram below depicts the lifecycle of a storage request: +![image](./images/storeRequest.png) + +## Client Role + +A node implementing the client role mediates the persistence of data within the Codex network. + +A client has two primary responsibilities: + +- Requesting storage from the network by sending a storage request to the smart contract. +- Withdrawing funds from the storage requests previously created by the client. + +### Creating Storage Requests + +When a user prompts the client node to create a storage request, the client node SHOULD receive the input parameters for the storage request from the user. + +To create a request to persist a dataset on the Codex network, client nodes MUST split the dataset into data chunks, $(c_1, c_2, c_3, \ldots, c_{n})$. +The data chunks are then encoded with the erasure coding method and the provided input parameters. + +The applied erasure coding method, used on data being persisted all SPs, +SHOULD be the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA). +If the client node uses a different algorithm, once storage request is made, +SP will not be able to submit valid proofs. + +After encoding, data chunks are distributed over a number of slots. +The final slot roots and other metadata MUST be placed into a `Manifest` (TODO: Manifest RFC). +The CID for the `Manifest` MUST then be used as the `cid` for the stored dataset. + +After the dataset is prepared, +a client node MUST call the smart contract function `requestStorage(request)`, +providing the desired request parameters in the `request` parameter. +The `request` parameter is of type `Request`: + +```solidity +struct Request { + address client; + Ask ask; + Content content; + uint256 expiry; + byte32 nonce; +} + +struct Ask { + uint256 reward; + uint256 collateral; + uint256 proofProbability; + uint256 duration; + uint64 slots; + uint256 slotSize; + uint64 maxSlotLoss; +} + +struct Content { + string cid; + byte32 merkleRoot; +} ``` + +The the table below provides the description of the `Request` and the associated types attributes: + +| attribute | type | description | +|-----------|------|-------------| +| `client` | `address` | The Codex node requesting storage. | +| `ask` | `Ask` | Parameters of Request. | +| `content` | `Content` | The dataset that will be hosted with the storage request. | +| `expiry` | `uint256` | Timeout in seconds during which all the slots have to be filled, otherwise request will get cancelled. The final deadline timestamp is calculated at the moment the transaction is mined. | +| `nonce` | `byte32` | Random value to differentiate from other requests of same parameters. It SHOULD be a random byte array. | +| `reward` | `uint256` | Amount of tokens that will be awarded to SPs for finishing the storage request. It MUST be an amount of tokens offered per slot per second. The Ethereum address that submits the `requestStorage()` transaction MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least an equivalent amount in tokens. | +| `collateral` | `uint256` | The amount of tokens that SPs MUST submit when they fill slots. Collateral is then slashed or forfeited if SPs fail to provide the service requested by the storage request (more information in the [Slashing](#slashing) section). | +| `proofProbability` | `uint256` | Determines the average frequency that a proof is required within a period: $\frac{1}{proofProbability}$. SPs are required to provide proofs of storage to the marketplace smart contract when challenged by the smart contract. To prevent hosts from only coming online when proofs are required, the frequency at which proofs are requested from SPs is stochastic and is influenced by the `proofProbability` parameter. | +| `duration` | `uint256` | Total duration of the storage request in seconds. | +| `slots` | `uint64` | The number of requested slots. The slots will all have the same size. | +| `slotSize` | `uint256` | Amount of storage per slot in bytes. | +| `maxSlotLoss` | `uint64` | Max slots that can be lost before data is considered to be lost. | +| `cid` | `string` | An identifier used to locate the Manifest representing the dataset. It MUST be a [CIDv1](https://github.com/multiformats/cid#cidv1), SHA-256 [multihash](https://github.com/multiformats/multihash) and the data it represents SHOULD be discoverable in the network, otherwise the request will be eventually canceled. | +| `merkleRoot` | `byte32` | Merkle root of the dataset, used to verify storage proofs. | + +#### Renewal of Storage Requests + +It should be noted that the marketplace does not support extending requests. It is REQUIRED that if the user wants to extend the duration of a request, a new request with the same CID must be [created](#creating-storage-requests) **before the original request completes**. + +This ensures that the data will continue to persist in the network at the time when the new (or existing) SPs need to retrieve the complete dataset to fill the slots of the new request. + +### Withdrawing Funds + +The client node SHOULD monitor the status of the requests it created. +When a storage request enters the `Cancelled` state +(this occurs when not all slots were filled before the `expiry` timeout), +the client node SHOULD initiate the withdrawal of the remaining funds from the smart contract using the `withdrawFunds(requestId)` function. + +- The request is considered `Cancelled` if no `requestFulfilled(requestId)` event is observed during the timeout specified by the value returned from the `requestExpiresAt(requestId)` function. +- The request is considered `Failed` when the `RequestFailed(requestId)` event is observed. +- The request is considered `Finished` after the interval specified by the value returned from the `getRequestEnd(requestId)` function. + +## Storage Provider Role + +A Codex node acting as an SP persists data across the network by hosting slots requested by clients in their storage requests. + +The following tasks need to be considered when hosting a slot: + +- Filling a slot +- Proving +- Repairing a slot +- Collecting request reward and collateral + +### Filling Slots + +When a new request is created, the `StorageRequested(requestId, ask, expiry)` event is emitted with the following properties: + +- `requestId` - the ID of the request. +- `ask` - the specification of the request parameters. For details, see the definition of the `Request` type in the [Creating Storage Requests](#creating-storage-requests) section above. +- `expiry` - a Unix timestamp specifying when the request will be canceled if all slots are not filled by then. + +Based on the emitted parameters and node's operator configuration, +SP nodes decide whether it participate in the request by attempting to fill its slot(s). +Note that one SP can fill more than one slot. +If the SP node decides to ignore the request, no further action is required. +However, if the SP node decides to fill a slot, it MUST follow the remaining steps described below. + +An SP MUST decide which slot, specified by the slot index, it wants to fill. The SP MAY attempt to fill more than one slot. To fill a slot, the SP MUST first download the slot data using the CID of the manifest (**TODO: Manifest RFC**) and the slot index. The CID is specified in `request.content.cid`, which can be retrieved from the smart contract using `getRequest(requestId)`. Then, the node MUST generate a proof over the downloaded data (**TODO: Proving RFC**). + +When the proof is ready, the SP MUST make a transaction calling `fillSlot()` on the smart contract with the following REQUIRED parameters: + +- `requestId` - the ID of the request. +- `slotIndex` - the slot index that the node wants to fill. +- `proof` - the `Groth16Proof` proof structure, generated over the slot data. +- `collateral` - The amount of tokens required to fill a slot + +The Ethereum address, of the SP node from which the transaction originates, MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least the amount of required tokens. + +If the proof delivered by the SP is invalid or the slot was already filled by another SP, +then the transaction will revert. Otherwise, a `SlotFilled(requestId, slotIndex)` event is emitted. If the transaction is successful, the SP SHOULD transition into the __proving__ state, where it will need to submit proof of data possession when challenged by the smart contract. + +It should be noted that if the SP node observes a `SlotFilled` event for the slot it is currently downloading +the dataset for or generating the proof for, +it means that the slot has been filled by another node in the meantime. +In response, the SP SHOULD stop its current operation and attempt to fill a different, unfilled slot. + +### Proving + +Once an SP fills a slot, it MUST submit proofs to the smart contract when a challenge is issued by the contract. SPs SHOULD detect that a proof is required for the current period using the `isProofRequired(slotId)` function, +or that it will be required using the `willProofBeRequired(slotId)` function in the case that the [pointer is in downtime](https://github.com/codex-storage/codex-research/blob/41c4b4409d2092d0a5475aca0f28995034e58d14/design/storage-proof-timing.md). + +Once an SP knows it has to provide a proof, +it MUST get the proof challenge using `getChallenge(slotId)` +which then MUST be incorporated into the proof generation, +as described in Proving RFC (**TODO: Proving RFC**). + +When the proof is generated, it MUST be submitted by calling the `submitProof(slotId, proof)` smart contract function. + +#### Slashing + +There is a slashing scheme orchestrated by the smart contract to incentivize correct behavior and proper proof submissions by SPs. This scheme is configured at the smart contract level and applies uniformly to all participants in the network. The configuration of the slashing scheme can be obtained via the `getConfig()` contract call. + +The slashing works as follows: + +- An SP node MAY miss up to `config.collateral.slashCriterion` proofs before being slashed. +- It is then slashed by `config.collateral.slashPercentage` **of the originally required collateral** +(hence the slashing amount is always the same for a given request). +- If the number of slashes exceeds `config.collateral.maxNumberOfSlashes`, the slot is freed, the remaining collateral is burned, and the slot is offered to other nodes for repair. The smart contract also emits the `SlotFreed(requestId, slotIndex)` event. + +If, at any time, the number of freed slots exceeds the value specified by the `request.ask.maxSlotLoss` parameter, the dataset is considered lost, and the request is deemed _failed_. The collateral of all SPs that hosted the slots associated with the storage request is burned, and the `RequestFailed(requestId)` event is emitted. + +### Repair + +When a slot is freed due to too many missed proofs, which SHOULD be detected by listening to the `SlotFreed(requestId, slotIndex)` event, an SP node can decide whether to participate in repairing the slot. Similar to filling a slot, the node SHOULD consider the operator's configuration when making this decision. The SP that originally hosted the slot but failed to comply with proving requirements MAY also participate in the repair. However, by refilling the slot, the SP **will not** recover its original collateral and must submit new collateral using the `fillSlot()` call. + +The repair process is similar to filling slots. If the original slot dataset is no longer present in the network, the SP MAY use erasure coding to reconstruct the dataset. Reconstructing the original slot dataset requires retrieving other pieces of the dataset stored in other slots belonging to the request. For this reason, the node that successfully repairs a slot is entitled to an additional reward. (**TODO: Implementation**) + +The repair process proceeds as follows: + +1. The SP observes the `SlotFreed` event and decides to repair the slot. +2. The SP MUST download the chunks of data required to reconstruct the freed slot's data. The node MUST use the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA) to reconstruct the missing data. +3. The SP MUST generate proof over the reconstructed data. +4. The SP MUST call the `fillSlot()` smart contract function with the same parameters and collateral allowance as described in the [Filling Slots](#filling-slot) section. + +Below is a diagram depicting the proving and repair process: + +```text ┌───────────┐ │ Cancelled │ └───────────┘ @@ -115,153 +292,6 @@ Time ran out │ │ └───────── └──────────┘ ``` -![image](./images/storeRequest.png) - -## Client Role - -A node implementing the client role mediates the persistence of data within the Codex network. - -A client has two primary responsibilities: - -- Requesting storage from the network by sending a storage request to the smart contract. -- Withdrawing funds from the storage requests previously created by the client. - -### Creating Storage Requests - -When a user prompts the client node to create a storage request, the client node SHOULD receive the input parameters for the storage request from the user. - -To create a request to persist a dataset on the Codex network, client nodes MUST split the dataset into data chunks, $(c_1, c_2, c_3, \ldots, c_{n})$. Using the erasure coding method and the provided input parameters, the data chunks are encoded and distributed over a number of slots. The applied erasure coding method MUST use the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA). The final slot roots and other metadata MUST be placed into a `Manifest` (TODO: Manifest RFC). The CID for the `Manifest` MUST then be used as the `cid` for the stored dataset. - -After the dataset is prepared, a client node MUST call the smart contract function `requestStorage(request)`, providing the desired request parameters in the `request` parameter. The `request` parameter is of type `Request`: - -```solidity -struct Request { - address client; - Ask ask; - Content content; - uint256 expiry; - byte32 nonce; -} - -struct Ask { - uint256 reward; - uint256 collateral; - uint256 proofProbability; - uint256 duration; - uint64 slots; - uint256 slotSize; - uint64 maxSlotLoss; -} - -struct Content { - string cid; - byte32 merkleRoot; -} -``` - -The the table below provides the description of the `Request` and the associated types attributes: - -| attribute | type | description | -|-----------|------|-------------| -| `client` | `address` | The Codex node requesting storage. | -| `ask` | `Ask` | Parameters of Request. | -| `content` | `Content` | The dataset that will be hosted with the storage request. | -| `expiry` | `uint256` | Timeout in seconds during which all the slots have to be filled, otherwise Request will get cancelled. The final deadline timestamp is calculated at the moment the transaction is mined. | -| `nonce` | `byte32` | Random value to differentiate from other requests of same parameters. It SHOULD be a random byte array. | -| `reward` | `uint256` | Amount of tokens that will be awarded to SPs for finishing the storage request. It MUST be an amount of Tokens offered per slot per second. The Ethereum address that submits the `requestStorage()` transaction MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least an equivalent amount in Tokens. | -| `collateral` | `uint256` | The amount of tokens that SPs submit when they fill slots. Collateral is then slashed or forfeited if SPs fail to provide the service requested by the storage request (more information in the [Slashing](#Slashing) section). | -| `proofProbability` | `uint256` | Determines the average frequency that a proof is required within a period: $\frac{1}{proofProbability}$. SPs are required to provide proofs of storage to the marketplace smart contract when challenged by the smart contract. To prevent hosts from only coming online when proofs are required, the frequency at which proofs are requested from SPs is stochastic and is influenced by the `proofProbability` parameter. | -| `duration` | `uint256` | Total duration of the storage request in seconds. | -| `slots` | `uint64` | The number of requested slots. The slots will all have the same size. | -| `slotSize` | `uint256` | Amount of storage per slot in bytes. | -| `maxSlotLoss` | `uint64` | Max slots that can be lost without data considered to be lost. | -| `cid` | `string` | An identifier used to locate the Manifest representing the dataset. It MUST be a [CIDv1](https://github.com/multiformats/cid#cidv1), SHA-256 [multihash](https://github.com/multiformats/multihash) and the data it represents SHOULD be discoverable in the network, otherwise the request will be eventually canceled. | -| `merkleRoot` | `byte32` | Merkle root of the dataset, used to verify storage proofs | - -#### Renewal of Storage Requests - -It should be noted that the marketplace does not support extending requests. It is REQUIRED that if the user wants to extend the duration of a request, a new request with the same CID must be [created](#Creating-storage-requests) **before the original request completes**. - -This ensures that the data will continue to persist in the network at the time when the new (or existing) SPs need to retrieve the complete dataset to fill the slots of the new request. - -### Withdrawing Funds - -The client node SHOULD monitor the status of the requests it created. When a storage request enters the `Cancelled` state (this occurs when not all slots were filled before the `expiry` timeout), the client node SHOULD initiate the withdrawal of the remaining funds from the smart contract using the `withdrawFunds(requestId)` function. - -- The request is considered `Cancelled` if no `requestFulfilled(requestId)` event is observed during the timeout specified by the value returned from the `requestExpiresAt(requestId)` function. -- The request is considered `Failed` when the `RequestFailed(requestId)` event is observed. -- The request is considered `Finished` after the interval specified by the value returned from the `getRequestEnd(requestId)` function. - -## Storage Provider Role - -A Codex node acting as an SP persists data across the network by hosting slots requested by clients in their storage requests. - -The following tasks need to be considered when hosting a slot: - -- Filling a slot -- Proving -- Repairing a slot -- Collecting request reward and collateral - -### Filling Slots - -When a new request is created, the `StorageRequested(requestId, ask, expiry)` event is emitted with the following properties: - -- `requestId` - the ID of the request. -- `ask` - the specification of the request parameters. For details, see the definition of the `Request` type in the [Creating Storage Requests](#Creating-storage-requests) section above. -- `expiry` - a Unix timestamp specifying when the request will be canceled if all slots are not filled by then. - -It is then up to the SP node to decide, based on the emitted parameters and node's operator configuration, whether it wants to participate in the request and attempt to fill its slot(s) (note that one SP can fill more than one slot). If the SP node decides to ignore the request, no further action is required. However, if the SP decides to fill a slot, it MUST follow the remaining steps described below. - -The node acting as an SP MUST decide which slot, specified by the slot index, it wants to fill. The SP MAY attempt to fill more than one slot. To fill a slot, the SP MUST first download the slot data using the CID of the manifest (**TODO: Manifest RFC**) and the slot index. The CID is specified in `request.content.cid`, which can be retrieved from the smart contract using `getRequest(requestId)`. Then, the node MUST generate a proof over the downloaded data (**TODO: Proving RFC**). - -When the proof is ready, the SP MUST call `fillSlot()` on the smart contract with the following REQUIRED parameters: - -- `requestId` - the ID of the request. -- `slotIndex` - the slot index that the node wants to fill. -- `proof` - the `Groth16Proof` proof structure, generated over the slot data. - -The Ethereum address of the SP node from which the transaction originates MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least the amount of Tokens required as collateral for the request. - -If the proof delivered by the SP is invalid or the slot was already filled by another SP, then the transaction will revert. Otherwise, a `SlotFilled(requestId, slotIndex)` event is emitted. If the transaction is successful, the SP SHOULD transition into the __proving__ state, where it will need to submit proof of data possession when challenged by the smart contract. - -It should be noted that if the SP node observes a `SlotFilled` event for the slot it is currently downloading the dataset for or generating the proof for, it means that the slot has been filled by another node in the meantime. In response, the SP SHOULD stop its current operation and attempt to fill a different, unfilled slot. - -### Proving - -Once an SP fills a slot, it MUST submit proofs to the smart contract when a challenge is issued by the contract. SPs SHOULD detect that a proof is required for the current period using the `isProofRequired(slotId)` function, -or that it will be required using the `willProofBeRequired(slotId)` function in the case that the [pointer is in downtime](https://github.com/codex-storage/codex-research/blob/41c4b4409d2092d0a5475aca0f28995034e58d14/design/storage-proof-timing.md). - -Once an SP knows it has to provide a proof it MUST get the proof challenge using `getChallenge(slotId)`, which then -MUST be incorporated into the proof generation as described in Proving RFC (**TODO: Proving RFC**). - -When the proof is generated, it MUST be submitted by calling the `submitProof(slotId, proof)` smart contract function. - -#### Slashing - -There is a slashing scheme orchestrated by the smart contract to incentivize correct behavior and proper proof submissions by SPs. This scheme is configured at the smart contract level and applies uniformly to all participants in the network. The configuration of the slashing scheme can be obtained via the `getConfig()` contract call. - -The slashing works as follows: - -- An SP node MAY miss up to `config.collateral.slashCriterion` proofs before being slashed. -- It is then slashed by `config.collateral.slashPercentage` **of the originally required collateral** (hence the slashing amount is always the same for a given request). -- If the number of slashes exceeds `config.collateral.maxNumberOfSlashes`, the slot is freed, the remaining collateral is burned, and the slot is offered to other nodes for repair. The smart contract also emits the `SlotFreed(requestId, slotIndex)` event. - -If, at any time, the number of freed slots exceeds the value specified by the `request.ask.maxSlotLoss` parameter, the dataset is considered lost, and the request is deemed _failed_. The collateral of all SPs that hosted the slots associated with the storage request is burned, and the `RequestFailed(requestId)` event is emitted. - -### Repair - -When a slot is freed due to too many missed proofs, which SHOULD be detected by listening to the `SlotFreed(requestId, slotIndex)` event, an SP node can decide whether to participate in repairing the slot. Similar to filling a slot, the node SHOULD consider the operator's configuration when making this decision. The SP that originally hosted the slot but failed to comply with proving requirements MAY also participate in the repair. However, by refilling the slot, the SP **will not** recover its original collateral and must submit new collateral using the `fillSlot()` call. - -The repair process is similar to filling slots. If the original slot dataset is no longer present in the network, the SP MAY use erasure coding to reconstruct the dataset. Reconstructing the original slot dataset requires retrieving other pieces of the dataset stored in other slots belonging to the request. For this reason, the node that successfully repairs a slot is entitled to an additional reward. (**TODO: Implementation**) - -The repair process proceeds as follows: - -1. The SP observes the `SlotFreed` event and decides to repair the slot. -2. The SP MUST download the chunks of data required to reconstruct the freed slot's data. The node MUST use the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA) to reconstruct the missing data. -3. The SP MUST generate proof over the reconstructed data. -4. The SP MUST call the `fillSlot()` smart contract function with the same parameters and collateral allowance as described in the [Filling Slots](#filling-slot) section. - ### Collecting Funds An SP node SHOULD monitor the requests and the associated slots it hosts. From 5fbe49a57ee3534806a471a321d3bf936a7f2512 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Wed, 25 Sep 2024 22:19:39 -0400 Subject: [PATCH 05/14] Update marketplace.md --- specs/marketplace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 670af56..90fdb17 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -247,7 +247,7 @@ The repair process proceeds as follows: 1. The SP observes the `SlotFreed` event and decides to repair the slot. 2. The SP MUST download the chunks of data required to reconstruct the freed slot's data. The node MUST use the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA) to reconstruct the missing data. 3. The SP MUST generate proof over the reconstructed data. -4. The SP MUST call the `fillSlot()` smart contract function with the same parameters and collateral allowance as described in the [Filling Slots](#filling-slot) section. +4. The SP MUST call the `fillSlot()` smart contract function with the same parameters and collateral allowance as described in the [Filling Slots](#filling-slots) section. Below is a diagram depicting the proving and repair process: From 9360e2cbcfab01f3c8dd804b471c9741f5a09f76 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Wed, 25 Sep 2024 22:20:18 -0400 Subject: [PATCH 06/14] Delete specs/images/file8.png --- specs/images/file8.png | Bin 135100 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 specs/images/file8.png diff --git a/specs/images/file8.png b/specs/images/file8.png deleted file mode 100644 index d7ecca58dc5c5246bcfe0bb32eb14019d70838f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135100 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

ZM0BC0d)#8}TCSI=4p=CUe!M{1@%I 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 z∓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 Date: Tue, 1 Oct 2024 18:16:15 -0400 Subject: [PATCH 07/14] Update marketplace.md --- specs/marketplace.md | 103 +++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 90fdb17..06929eb 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -26,7 +26,7 @@ data persistence guarantees, and a comprehensive incentive structure. The marketplace is a critical component of the Codex network, serving as a platform where all involved parties interact to ensure data persistence. It provides mechanisms to enforce agreements and -facilitate data repair when storage providers, wil be abbrivated to SP in this document, +facilitate data repair when storage providers, abbreviated to SP in this document, fail to fulfill their duties. Implemented as a smart contract on an EVM-compatible blockchain, @@ -43,7 +43,7 @@ more roles to maintain a reliable persistence layer for users. | Storage Request or Request | A request created by a client node to persist data on the Codex network. | | Slot or Storage Slot | A space allocated by the storage request to store a piece of the request's dataset. | | Smart Contract | A smart contract implementing the marketplace functionality. | -| Token | ERC20-based token used within the Codex network. | +| token | ERC20-based token used within the Codex network. | ## Semantics @@ -51,10 +51,10 @@ The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL N “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [2119](https://www.ietf.org/rfc/rfc2119.txt). The marketplace contract manages storage requests, -maintains the state of allocated storage slots, and orchestrates SP rewards, +maintains the state of allocated storage slots, orchestrates SP node rewards, collaterals, and storage proofs. A node that wishes to participate in the Codex persistence layer MUST implement one or -more roles described in this document. +more roles described below. ### Roles @@ -93,9 +93,8 @@ To create a request to persist a dataset on the Codex network, client nodes MUST The data chunks are then encoded with the erasure coding method and the provided input parameters. The applied erasure coding method, used on data being persisted all SPs, -SHOULD be the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA). -If the client node uses a different algorithm, once storage request is made, -SP will not be able to submit valid proofs. +MUST be the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA). +When dataset is encoded with different algorithm, the dataset will be inaccessible. After encoding, data chunks are distributed over a number of slots. The final slot roots and other metadata MUST be placed into a `Manifest` (TODO: Manifest RFC). @@ -141,8 +140,8 @@ The the table below provides the description of the `Request` and the associated | `expiry` | `uint256` | Timeout in seconds during which all the slots have to be filled, otherwise request will get cancelled. The final deadline timestamp is calculated at the moment the transaction is mined. | | `nonce` | `byte32` | Random value to differentiate from other requests of same parameters. It SHOULD be a random byte array. | | `reward` | `uint256` | Amount of tokens that will be awarded to SPs for finishing the storage request. It MUST be an amount of tokens offered per slot per second. The Ethereum address that submits the `requestStorage()` transaction MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least an equivalent amount in tokens. | -| `collateral` | `uint256` | The amount of tokens that SPs MUST submit when they fill slots. Collateral is then slashed or forfeited if SPs fail to provide the service requested by the storage request (more information in the [Slashing](#slashing) section). | -| `proofProbability` | `uint256` | Determines the average frequency that a proof is required within a period: $\frac{1}{proofProbability}$. SPs are required to provide proofs of storage to the marketplace smart contract when challenged by the smart contract. To prevent hosts from only coming online when proofs are required, the frequency at which proofs are requested from SPs is stochastic and is influenced by the `proofProbability` parameter. | +| `collateral` | `uint256` | The amount of tokens that SP nodes MUST submit when they fill slots. Collateral is then slashed or forfeited if SPs fail to provide the service requested by the storage request (more information in the [Slashing](#slashing) section). | +| `proofProbability` | `uint256` | Determines the average frequency that a proof is required within a period: $\frac{1}{proofProbability}$. SPs are required to provide proofs of storage to the marketplace smart contract when challenged by the smart contract. To prevent hosts from only coming online when proofs are required, the frequency at which proofs are requested from SP nodes is stochastic and is influenced by the `proofProbability` parameter. | | `duration` | `uint256` | Total duration of the storage request in seconds. | | `slots` | `uint64` | The number of requested slots. The slots will all have the same size. | | `slotSize` | `uint256` | Amount of storage per slot in bytes. | @@ -180,6 +179,49 @@ The following tasks need to be considered when hosting a slot: ### Filling Slots +Below is a diagram depicting states of a storage request including filling slots, proving, repair states: + +```text + ┌───────────┐ + │ Cancelled │ + └───────────┘ + ▲ + │ Not all + │ Slots filled + │ + ┌───────────┐ ┌──────┴─────────────┐ ┌─────────┐ + │ Submitted ├───►│ Slots Being Filled ├──────────►│ Started │ + └───────────┘ └────────────────────┘ All Slots └────┬────┘ + Filled │ + │ + ┌───────────────────────┘ + Proving ▼ + ┌────────────────────────────────────────────────────────────┐ + │ │ + │ Proof submitted │ + │ ┌─────────────────────────► All good │ + │ │ │ + │ Proof required │ + │ │ │ + │ │ Proof missed │ + │ └─────────────────────────► After some time slashed │ + │ eventually Slot freed │ + │ │ + └────────┬─┬─────────────────────────────────────────────────┘ + │ │ ▲ + │ │ │ + │ │ SP kicked out and Slot freed ┌───────┴────────┐ +All good │ ├─────────────────────────────►│ Repair process │ +Time ran out │ │ └────────────────┘ + │ │ + │ │ Too many Slots freed ┌────────┐ + │ └─────────────────────────────►│ Failed │ + ▼ └────────┘ + ┌──────────┐ + │ Finished │ + └──────────┘ +``` + When a new request is created, the `StorageRequested(requestId, ask, expiry)` event is emitted with the following properties: - `requestId` - the ID of the request. @@ -249,49 +291,6 @@ The repair process proceeds as follows: 3. The SP MUST generate proof over the reconstructed data. 4. The SP MUST call the `fillSlot()` smart contract function with the same parameters and collateral allowance as described in the [Filling Slots](#filling-slots) section. -Below is a diagram depicting the proving and repair process: - -```text - ┌───────────┐ - │ Cancelled │ - └───────────┘ - ▲ - │ Not all - │ Slots filled - │ - ┌───────────┐ ┌──────┴─────────────┐ ┌─────────┐ - │ Submitted ├───►│ Slots Being Filled ├──────────►│ Started │ - └───────────┘ └────────────────────┘ All Slots └────┬────┘ - Filled │ - │ - ┌───────────────────────┘ - Proving ▼ - ┌────────────────────────────────────────────────────────────┐ - │ │ - │ Proof submitted │ - │ ┌─────────────────────────► All good │ - │ │ │ - │ Proof required │ - │ │ │ - │ │ Proof missed │ - │ └─────────────────────────► After some time slashed │ - │ eventually Slot freed │ - │ │ - └────────┬─┬─────────────────────────────────────────────────┘ - │ │ ▲ - │ │ │ - │ │ SP kicked out and Slot freed ┌───────┴────────┐ -All good │ ├─────────────────────────────►│ Repair process │ -Time ran out │ │ └────────────────┘ - │ │ - │ │ Too many Slots freed ┌────────┐ - │ └─────────────────────────────►│ Failed │ - ▼ └────────┘ - ┌──────────┐ - │ Finished │ - └──────────┘ -``` - ### Collecting Funds An SP node SHOULD monitor the requests and the associated slots it hosts. From b05a1d4bded04ccd48cc4a8378ae2f81ea1e0fea Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Tue, 1 Oct 2024 18:47:33 -0400 Subject: [PATCH 08/14] Update marketplace.md --- specs/marketplace.md | 58 ++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 06929eb..5acce4b 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -58,15 +58,15 @@ more roles described below. ### Roles -A node can assume one of the three main roles in the network: the client, SP, and validator. +A node can assume one of the three main roles in the network: the client, SP node, and validator. A client is a potentially short-lived node in the network with the purpose of persisting its data in the Codex persistence layer. -An SP is a long-lived node providing storage for clients in exchange for profit. +An SP node is a long-lived node providing storage for clients in exchange for profit. To ensure a reliable, robust service for clients, -SPs are required to periodically provide proofs that they are persisting the data. +SP nodes are required to periodically provide proofs that they are persisting the data. -A validator ensures that SPs have submitted valid proofs each period where the smart contract required a proof to be submitted for slots filled by the SP. +A validator ensures that SP nodes have submitted valid proofs each period where the smart contract required a proof to be submitted for slots filled by the SP node. A validator may be a long-lived or short-lived node. This role does not get penalized if deciding not to be a long-lived node. @@ -92,7 +92,7 @@ When a user prompts the client node to create a storage request, the client node To create a request to persist a dataset on the Codex network, client nodes MUST split the dataset into data chunks, $(c_1, c_2, c_3, \ldots, c_{n})$. The data chunks are then encoded with the erasure coding method and the provided input parameters. -The applied erasure coding method, used on data being persisted all SPs, +The applied erasure coding method, used on data being persisted all SP nodes, MUST be the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA). When dataset is encoded with different algorithm, the dataset will be inaccessible. @@ -139,9 +139,9 @@ The the table below provides the description of the `Request` and the associated | `content` | `Content` | The dataset that will be hosted with the storage request. | | `expiry` | `uint256` | Timeout in seconds during which all the slots have to be filled, otherwise request will get cancelled. The final deadline timestamp is calculated at the moment the transaction is mined. | | `nonce` | `byte32` | Random value to differentiate from other requests of same parameters. It SHOULD be a random byte array. | -| `reward` | `uint256` | Amount of tokens that will be awarded to SPs for finishing the storage request. It MUST be an amount of tokens offered per slot per second. The Ethereum address that submits the `requestStorage()` transaction MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least an equivalent amount in tokens. | -| `collateral` | `uint256` | The amount of tokens that SP nodes MUST submit when they fill slots. Collateral is then slashed or forfeited if SPs fail to provide the service requested by the storage request (more information in the [Slashing](#slashing) section). | -| `proofProbability` | `uint256` | Determines the average frequency that a proof is required within a period: $\frac{1}{proofProbability}$. SPs are required to provide proofs of storage to the marketplace smart contract when challenged by the smart contract. To prevent hosts from only coming online when proofs are required, the frequency at which proofs are requested from SP nodes is stochastic and is influenced by the `proofProbability` parameter. | +| `reward` | `uint256` | Amount of tokens that will be awarded to SP nodes for finishing the storage request. It MUST be an amount of tokens offered per slot per second. The Ethereum address that submits the `requestStorage()` transaction MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least an equivalent amount in tokens. | +| `collateral` | `uint256` | The amount of tokens that SP nodes MUST submit when they fill slots. Collateral is then slashed or forfeited if SP nodes fail to provide the service requested by the storage request (more information in the [Slashing](#slashing) section). | +| `proofProbability` | `uint256` | Determines the average frequency that a proof is required within a period: $\frac{1}{proofProbability}$. SP nodes are required to provide proofs of storage to the marketplace smart contract when challenged by the smart contract. To prevent hosts from only coming online when proofs are required, the frequency at which proofs are requested from SP nodes is stochastic and is influenced by the `proofProbability` parameter. | | `duration` | `uint256` | Total duration of the storage request in seconds. | | `slots` | `uint64` | The number of requested slots. The slots will all have the same size. | | `slotSize` | `uint256` | Amount of storage per slot in bytes. | @@ -153,7 +153,7 @@ The the table below provides the description of the `Request` and the associated It should be noted that the marketplace does not support extending requests. It is REQUIRED that if the user wants to extend the duration of a request, a new request with the same CID must be [created](#creating-storage-requests) **before the original request completes**. -This ensures that the data will continue to persist in the network at the time when the new (or existing) SPs need to retrieve the complete dataset to fill the slots of the new request. +This ensures that the data will continue to persist in the network at the time when the new (or existing) SP nodes need to retrieve the complete dataset to fill the slots of the new request. ### Withdrawing Funds @@ -168,7 +168,7 @@ the client node SHOULD initiate the withdrawal of the remaining funds from the s ## Storage Provider Role -A Codex node acting as an SP persists data across the network by hosting slots requested by clients in their storage requests. +A Codex node acting as an SP node persists data across the network by hosting slots requested by clients in their storage requests. The following tasks need to be considered when hosting a slot: @@ -230,13 +230,13 @@ When a new request is created, the `StorageRequested(requestId, ask, expiry)` ev Based on the emitted parameters and node's operator configuration, SP nodes decide whether it participate in the request by attempting to fill its slot(s). -Note that one SP can fill more than one slot. +Note that one SP node can fill more than one slot. If the SP node decides to ignore the request, no further action is required. However, if the SP node decides to fill a slot, it MUST follow the remaining steps described below. -An SP MUST decide which slot, specified by the slot index, it wants to fill. The SP MAY attempt to fill more than one slot. To fill a slot, the SP MUST first download the slot data using the CID of the manifest (**TODO: Manifest RFC**) and the slot index. The CID is specified in `request.content.cid`, which can be retrieved from the smart contract using `getRequest(requestId)`. Then, the node MUST generate a proof over the downloaded data (**TODO: Proving RFC**). +An SP node MUST decide which slot, specified by the slot index, it wants to fill. The SP node MAY attempt to fill more than one slot. To fill a slot, the SP node MUST first download the slot data using the CID of the manifest (**TODO: Manifest RFC**) and the slot index. The CID is specified in `request.content.cid`, which can be retrieved from the smart contract using `getRequest(requestId)`. Then, the node MUST generate a proof over the downloaded data (**TODO: Proving RFC**). -When the proof is ready, the SP MUST make a transaction calling `fillSlot()` on the smart contract with the following REQUIRED parameters: +When the proof is ready, the SP node MUST make a transaction calling `fillSlot()` on the smart contract with the following REQUIRED parameters: - `requestId` - the ID of the request. - `slotIndex` - the slot index that the node wants to fill. @@ -245,20 +245,20 @@ When the proof is ready, the SP MUST make a transaction calling `fillSlot()` on The Ethereum address, of the SP node from which the transaction originates, MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least the amount of required tokens. -If the proof delivered by the SP is invalid or the slot was already filled by another SP, -then the transaction will revert. Otherwise, a `SlotFilled(requestId, slotIndex)` event is emitted. If the transaction is successful, the SP SHOULD transition into the __proving__ state, where it will need to submit proof of data possession when challenged by the smart contract. +If the proof delivered by the SP node is invalid or the slot was already filled by another SP node, +then the transaction will revert. Otherwise, a `SlotFilled(requestId, slotIndex)` event is emitted. If the transaction is successful, the SP node SHOULD transition into the __proving__ state, where it will need to submit proof of data possession when challenged by the smart contract. It should be noted that if the SP node observes a `SlotFilled` event for the slot it is currently downloading the dataset for or generating the proof for, it means that the slot has been filled by another node in the meantime. -In response, the SP SHOULD stop its current operation and attempt to fill a different, unfilled slot. +In response, the SP node SHOULD stop its current operation and attempt to fill a different, unfilled slot. ### Proving -Once an SP fills a slot, it MUST submit proofs to the smart contract when a challenge is issued by the contract. SPs SHOULD detect that a proof is required for the current period using the `isProofRequired(slotId)` function, +Once an SP node fills a slot, it MUST submit proofs to the smart contract when a challenge is issued by the contract. SP nodes SHOULD detect that a proof is required for the current period using the `isProofRequired(slotId)` function, or that it will be required using the `willProofBeRequired(slotId)` function in the case that the [pointer is in downtime](https://github.com/codex-storage/codex-research/blob/41c4b4409d2092d0a5475aca0f28995034e58d14/design/storage-proof-timing.md). -Once an SP knows it has to provide a proof, +Once an SP node knows it has to provide a proof, it MUST get the proof challenge using `getChallenge(slotId)` which then MUST be incorporated into the proof generation, as described in Proving RFC (**TODO: Proving RFC**). @@ -267,7 +267,7 @@ When the proof is generated, it MUST be submitted by calling the `submitProof(sl #### Slashing -There is a slashing scheme orchestrated by the smart contract to incentivize correct behavior and proper proof submissions by SPs. This scheme is configured at the smart contract level and applies uniformly to all participants in the network. The configuration of the slashing scheme can be obtained via the `getConfig()` contract call. +There is a slashing scheme orchestrated by the smart contract to incentivize correct behavior and proper proof submissions by SP nodes. This scheme is configured at the smart contract level and applies uniformly to all participants in the network. The configuration of the slashing scheme can be obtained via the `getConfig()` contract call. The slashing works as follows: @@ -276,20 +276,20 @@ The slashing works as follows: (hence the slashing amount is always the same for a given request). - If the number of slashes exceeds `config.collateral.maxNumberOfSlashes`, the slot is freed, the remaining collateral is burned, and the slot is offered to other nodes for repair. The smart contract also emits the `SlotFreed(requestId, slotIndex)` event. -If, at any time, the number of freed slots exceeds the value specified by the `request.ask.maxSlotLoss` parameter, the dataset is considered lost, and the request is deemed _failed_. The collateral of all SPs that hosted the slots associated with the storage request is burned, and the `RequestFailed(requestId)` event is emitted. +If, at any time, the number of freed slots exceeds the value specified by the `request.ask.maxSlotLoss` parameter, the dataset is considered lost, and the request is deemed _failed_. The collateral of all SP nodes that hosted the slots associated with the storage request is burned, and the `RequestFailed(requestId)` event is emitted. ### Repair -When a slot is freed due to too many missed proofs, which SHOULD be detected by listening to the `SlotFreed(requestId, slotIndex)` event, an SP node can decide whether to participate in repairing the slot. Similar to filling a slot, the node SHOULD consider the operator's configuration when making this decision. The SP that originally hosted the slot but failed to comply with proving requirements MAY also participate in the repair. However, by refilling the slot, the SP **will not** recover its original collateral and must submit new collateral using the `fillSlot()` call. +When a slot is freed due to too many missed proofs, which SHOULD be detected by listening to the `SlotFreed(requestId, slotIndex)` event, an SP node can decide whether to participate in repairing the slot. Similar to filling a slot, the node SHOULD consider the operator's configuration when making this decision. The SP node that originally hosted the slot but failed to comply with proving requirements MAY also participate in the repair. However, by refilling the slot, the SP node **will not** recover its original collateral and must submit new collateral using the `fillSlot()` call. -The repair process is similar to filling slots. If the original slot dataset is no longer present in the network, the SP MAY use erasure coding to reconstruct the dataset. Reconstructing the original slot dataset requires retrieving other pieces of the dataset stored in other slots belonging to the request. For this reason, the node that successfully repairs a slot is entitled to an additional reward. (**TODO: Implementation**) +The repair process is similar to filling slots. If the original slot dataset is no longer present in the network, the SP node MAY use erasure coding to reconstruct the dataset. Reconstructing the original slot dataset requires retrieving other pieces of the dataset stored in other slots belonging to the request. For this reason, the node that successfully repairs a slot is entitled to an additional reward. (**TODO: Implementation**) The repair process proceeds as follows: -1. The SP observes the `SlotFreed` event and decides to repair the slot. -2. The SP MUST download the chunks of data required to reconstruct the freed slot's data. The node MUST use the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA) to reconstruct the missing data. -3. The SP MUST generate proof over the reconstructed data. -4. The SP MUST call the `fillSlot()` smart contract function with the same parameters and collateral allowance as described in the [Filling Slots](#filling-slots) section. +1. The SP node observes the `SlotFreed` event and decides to repair the slot. +2. The SP node MUST download the chunks of data required to reconstruct the freed slot's data. The node MUST use the [Reed-Solomon algorithm](https://hackmd.io/FB58eZQoTNm-dnhu0Y1XnA) to reconstruct the missing data. +3. The SP node MUST generate proof over the reconstructed data. +4. The SP node MUST call the `fillSlot()` smart contract function with the same parameters and collateral allowance as described in the [Filling Slots](#filling-slots) section. ### Collecting Funds @@ -311,11 +311,11 @@ For each of the states listed above, different funds are handled as follows: ## Validator Role -In a blockchain, a contract cannot change its state without a transaction and gas initiating the state change. Therefore, our smart contract requires an external trigger to periodically check and confirm that a storage proof has been delivered by the SP. This is where the validator role is essential. +In a blockchain, a contract cannot change its state without a transaction and gas initiating the state change. Therefore, our smart contract requires an external trigger to periodically check and confirm that a storage proof has been delivered by the SP node. This is where the validator role is essential. -The validator role is fulfilled by nodes that help to verify that SPs have submitted the required storage proofs. +The validator role is fulfilled by nodes that help to verify that SP nodes have submitted the required storage proofs. -It is the smart contract that checks if the proof requested from an SP has been delivered. The validator only triggers the decision-making function in the smart contract. To incentivize validators, they receive a reward each time they correctly mark a proof as missing. +It is the smart contract that checks if the proof requested from an SP node has been delivered. The validator only triggers the decision-making function in the smart contract. To incentivize validators, they receive a reward each time they correctly mark a proof as missing. Each time a validator observes the `SlotFilled` event, it SHOULD add the slot reported in the `SlotFilled` event to the validator's list of watched slots. Then, after the end of each period, a validator has up to `config.proofs.timeout` seconds (a configuration parameter retrievable with `getConfig()`) to validate all the slots. If a slot lacks the required proof, the validator SHOULD call the `markProofAsMissing(slotId, period)` function on the smart contract. This function validates the correctness of the claim, and if right, will send a reward to the validator. From 04280b3e882994f2ea0d2c056b94c2ab6b882786 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Tue, 1 Oct 2024 18:55:53 -0400 Subject: [PATCH 09/14] Update marketplace.md --- specs/marketplace.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 5acce4b..87178a1 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -33,17 +33,6 @@ Implemented as a smart contract on an EVM-compatible blockchain, the marketplace enables various scenarios where nodes assume one or more roles to maintain a reliable persistence layer for users. -### Definitions - -| Terminology | Description | -|---------------------------|---------------------------------------------------------------------------------------------------------------------------| -| Storage Provider (SP) | A node in the Codex network that provides storage services to the marketplace. | -| Validator | A node that assists in identifying missing storage proofs. | -| Client | A node that interacts with other nodes in the Codex network to store, locate, and retrieve data. | -| Storage Request or Request | A request created by a client node to persist data on the Codex network. | -| Slot or Storage Slot | A space allocated by the storage request to store a piece of the request's dataset. | -| Smart Contract | A smart contract implementing the marketplace functionality. | -| token | ERC20-based token used within the Codex network. | ## Semantics @@ -56,6 +45,18 @@ collaterals, and storage proofs. A node that wishes to participate in the Codex persistence layer MUST implement one or more roles described below. +### Definitions + +| Terminology | Description | +|---------------------------|---------------------------------------------------------------------------------------------------------------------------| +| Storage Provider (SP) | A node in the Codex network that provides storage services to the marketplace. | +| Validator | A node that assists in identifying missing storage proofs. | +| Client | A node that interacts with other nodes in the Codex network to store, locate, and retrieve data. | +| Storage Request or Request | A request created by a client node to persist data on the Codex network. | +| Slot or Storage Slot | A space allocated by the storage request to store a piece of the request's dataset. | +| Smart Contract | A smart contract implementing the marketplace functionality. | +| token | ERC20-based token used within the Codex network. | + ### Roles A node can assume one of the three main roles in the network: the client, SP node, and validator. From f72cc3cf5331ca8a02cd8a4bb7e11a7dd9433eee Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Wed, 9 Oct 2024 19:40:26 -0400 Subject: [PATCH 10/14] Update marketplace.md --- specs/marketplace.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 87178a1..3b0fb6c 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -49,12 +49,12 @@ more roles described below. | Terminology | Description | |---------------------------|---------------------------------------------------------------------------------------------------------------------------| -| Storage Provider (SP) | A node in the Codex network that provides storage services to the marketplace. | -| Validator | A node that assists in identifying missing storage proofs. | -| Client | A node that interacts with other nodes in the Codex network to store, locate, and retrieve data. | -| Storage Request or Request | A request created by a client node to persist data on the Codex network. | -| Slot or Storage Slot | A space allocated by the storage request to store a piece of the request's dataset. | -| Smart Contract | A smart contract implementing the marketplace functionality. | +| storage provider (SP) | A node in the Codex network that provides storage services to the marketplace. | +| validator | A node that assists in identifying missing storage proofs. | +| client | A node that interacts with other nodes in the Codex network to store, locate, and retrieve data. | +| storage request or request | A request created by a client node to persist data on the Codex network. | +| slot or storage slot | A space allocated by the storage request to store a piece of the request's dataset. | +| marketplace contract | A smart contract implementing the marketplace functionality. | | token | ERC20-based token used within the Codex network. | ### Roles @@ -141,7 +141,7 @@ The the table below provides the description of the `Request` and the associated | `expiry` | `uint256` | Timeout in seconds during which all the slots have to be filled, otherwise request will get cancelled. The final deadline timestamp is calculated at the moment the transaction is mined. | | `nonce` | `byte32` | Random value to differentiate from other requests of same parameters. It SHOULD be a random byte array. | | `reward` | `uint256` | Amount of tokens that will be awarded to SP nodes for finishing the storage request. It MUST be an amount of tokens offered per slot per second. The Ethereum address that submits the `requestStorage()` transaction MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least an equivalent amount in tokens. | -| `collateral` | `uint256` | The amount of tokens that SP nodes MUST submit when they fill slots. Collateral is then slashed or forfeited if SP nodes fail to provide the service requested by the storage request (more information in the [Slashing](#slashing) section). | +| `collateral` | `uint256` | The amount of tokens that SP nodes MUST submit when they fill slots. Collateral is then slashed or forfeited if SP nodes fail to provide the service requested by the storage request (more information in the [Slashing](#slashing) section). The Ethereum address that submits the `fillSlot()` transaction MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least an amount required for collateral. | | `proofProbability` | `uint256` | Determines the average frequency that a proof is required within a period: $\frac{1}{proofProbability}$. SP nodes are required to provide proofs of storage to the marketplace smart contract when challenged by the smart contract. To prevent hosts from only coming online when proofs are required, the frequency at which proofs are requested from SP nodes is stochastic and is influenced by the `proofProbability` parameter. | | `duration` | `uint256` | Total duration of the storage request in seconds. | | `slots` | `uint64` | The number of requested slots. The slots will all have the same size. | @@ -178,8 +178,6 @@ The following tasks need to be considered when hosting a slot: - Repairing a slot - Collecting request reward and collateral -### Filling Slots - Below is a diagram depicting states of a storage request including filling slots, proving, repair states: ```text @@ -223,6 +221,8 @@ Time ran out │ │ └───────── └──────────┘ ``` +### Filling Slots + When a new request is created, the `StorageRequested(requestId, ask, expiry)` event is emitted with the following properties: - `requestId` - the ID of the request. From 891bfb1d8a5cc38fcf82e0fc8692d8440d371f77 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Wed, 9 Oct 2024 19:53:59 -0400 Subject: [PATCH 11/14] Update marketplace.md --- specs/marketplace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 3b0fb6c..ef2fff2 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -54,7 +54,7 @@ more roles described below. | client | A node that interacts with other nodes in the Codex network to store, locate, and retrieve data. | | storage request or request | A request created by a client node to persist data on the Codex network. | | slot or storage slot | A space allocated by the storage request to store a piece of the request's dataset. | -| marketplace contract | A smart contract implementing the marketplace functionality. | +| smart contract | A set of rules implementing the marketplace functionality on a blockchain. | | token | ERC20-based token used within the Codex network. | ### Roles From 75c262693064ed6376d02936f1209f436e6bff9a Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Wed, 9 Oct 2024 20:37:03 -0400 Subject: [PATCH 12/14] Update marketplace.md --- specs/marketplace.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 242c67d..94827fc 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -257,8 +257,8 @@ In response, the SP node SHOULD stop its current operation and attempt to fill a ### Proving - -Once an SP node fills a slot, it MUST submit proofs to the smart contract when a challenge is issued by the contract. SP nodes SHOULD detect that a proof is required for the current period using the `isProofRequired(slotId)` function, +Once an SP node fills a slot, it MUST submit proofs to the smart contract when a challenge is issued by the contract. +SP nodes SHOULD detect that a proof is required for the current period using the `isProofRequired(slotId)` function, or that it will be required using the `willProofBeRequired(slotId)` function in the case that the [pointer is in downtime](https://github.com/codex-storage/codex-research/blob/41c4b4409d2092d0a5475aca0f28995034e58d14/design/storage-proof-timing.md). Once an SP node knows it has to provide a proof, From d5209c880b434b225af906e16a2bb90e0796597e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Uhl=C3=AD=C5=99?= Date: Thu, 10 Oct 2024 18:31:38 +0200 Subject: [PATCH 13/14] Update specs/marketplace.md --- specs/marketplace.md | 1 - 1 file changed, 1 deletion(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 94827fc..7d24f9d 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -243,7 +243,6 @@ When the proof is ready, the SP node MUST make a transaction calling `fillSlot() - `requestId` - the ID of the request. - `slotIndex` - the slot index that the node wants to fill. - `proof` - the `Groth16Proof` proof structure, generated over the slot data. -- `collateral` - The amount of tokens required to fill a slot The Ethereum address, of the SP node from which the transaction originates, MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least the amount of required tokens. From 057fb30aaf718d0e3ef09215853b744e301a8dc2 Mon Sep 17 00:00:00 2001 From: Jimmy Debe <91767824+jimstir@users.noreply.github.com> Date: Sun, 13 Oct 2024 21:25:02 -0400 Subject: [PATCH 14/14] Update specs/marketplace.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adam Uhlíř --- specs/marketplace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/marketplace.md b/specs/marketplace.md index 7d24f9d..6302d39 100644 --- a/specs/marketplace.md +++ b/specs/marketplace.md @@ -244,7 +244,7 @@ When the proof is ready, the SP node MUST make a transaction calling `fillSlot() - `slotIndex` - the slot index that the node wants to fill. - `proof` - the `Groth16Proof` proof structure, generated over the slot data. -The Ethereum address, of the SP node from which the transaction originates, MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least the amount of required tokens. +The Ethereum address, of the SP node from which the transaction originates, MUST have [approval](https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#IERC20-approve-address-uint256-) for the transfer of at least the amount of required tokens for the request's collateral. If the proof delivered by the SP node is invalid or the slot was already filled by another SP node, then the transaction will revert. Otherwise, a `SlotFilled(requestId, slotIndex)` event is emitted. If the transaction is successful, the SP node SHOULD transition into the __proving__ state, where it will need to submit proof of data possession when challenged by the smart contract.