[readme] update readme with slots, add references
This commit is contained in:
parent
7c9ebb3c31
commit
fcc28b3931
65
Readme.md
65
Readme.md
|
@ -1,10 +1,10 @@
|
|||
Codex Contracts
|
||||
================
|
||||
|
||||
An experimental implementation of the contracts that underlay the Codex storage
|
||||
network. Its goal is to experiment with the rules around the bidding process,
|
||||
the storage contracts, the storage proofs and the host collateral. Neither
|
||||
completeness nor correctness are guaranteed at this moment in time.
|
||||
An experimental implementation of the smart contracts that underlay the Codex
|
||||
storage network. Its goal is to experiment with the rules around the bidding
|
||||
process, the storage contracts, the storage proofs and the host collateral.
|
||||
Neither completeness nor correctness are guaranteed at this moment in time.
|
||||
|
||||
Running
|
||||
-------
|
||||
|
@ -26,10 +26,10 @@ Overview
|
|||
|
||||
The Codex storage network depends on hosts offering storage to clients of the
|
||||
network. The smart contracts in this repository handle interactions between
|
||||
client and host as they negotiate and fulfill a contract to store data for a
|
||||
client and hosts as they negotiate and fulfill a contract to store data for a
|
||||
certain amount of time.
|
||||
|
||||
When all goes well, the client and host perform the following steps:
|
||||
When all goes well, the client and hosts perform the following steps:
|
||||
|
||||
Client Host Marketplace Contract
|
||||
| | |
|
||||
|
@ -38,7 +38,7 @@ When all goes well, the client and host perform the following steps:
|
|||
| |
|
||||
| ----- data (2) ---> | |
|
||||
| | |
|
||||
| --- fulfill (3) ---> |
|
||||
| ----- fill (3) ----> |
|
||||
| |
|
||||
| ---- proof (4) ----> |
|
||||
| |
|
||||
|
@ -51,19 +51,23 @@ When all goes well, the client and host perform the following steps:
|
|||
1. Client submits a request for storage, containing the size of the data that
|
||||
it wants to store and the length of time it wants to store it
|
||||
2. Client makes the data available to hosts
|
||||
3. The first host to submit a storage proof can fulfill the request
|
||||
4. While the storage contract is active, the host proves that it is still
|
||||
3. Hosts submit storage proofs to fill slots in the contract
|
||||
4. While the storage contract is active, host prove that they are still
|
||||
storing the data by responding to frequent random challenges
|
||||
5. At the end of the contract the host is paid
|
||||
5. At the end of the contract the hosts are paid
|
||||
|
||||
Contracts
|
||||
---------
|
||||
|
||||
A storage contract can be negotiated through requests. A request contains the
|
||||
size of the data and the length of time during which it needs to be stored. It
|
||||
also contains a reward that a client is willing to pay and proof requirements
|
||||
such as how often a proof will need to be submitted by the host. A random nonce
|
||||
is included to ensure uniqueness among similar requests.
|
||||
A storage contract contains of a number of slots. Each of these slots represents
|
||||
an agreement with a storage host to store a part of the data. Hosts that want to
|
||||
offer storage can fill a slot in the contract.
|
||||
|
||||
A contract can be negotiated through requests. A request contains the size of
|
||||
the data, the length of time during which it needs to be stored, and a number of
|
||||
slots. It also contains the reward that a client is willing to pay and proof
|
||||
requirements such as how often a proof will need to be submitted by hosts. A
|
||||
random nonce is included to ensure uniqueness among similar requests.
|
||||
|
||||
When a new storage contract is created the client immediately pays the entire
|
||||
price of the contract. The payment is only released to the host upon successful
|
||||
|
@ -82,23 +86,32 @@ percentage (slashed).
|
|||
Proofs
|
||||
------
|
||||
|
||||
A host is required to submit frequent proofs while a contract is active. These
|
||||
proofs ensure with a high probability that the host is still holding on to the
|
||||
data that it was entrusted with.
|
||||
Hosts are required to submit frequent proofs while a contract is active. These
|
||||
proofs ensure with a high probability that hosts are still holding on to the
|
||||
data that they were entrusted with.
|
||||
|
||||
To ensure that a host is not able to predict and precalculate proofs, these
|
||||
To ensure that hosts are not able to predict and precalculate proofs, these
|
||||
proofs are based on a random challenge. Currently we use ethereum block hashes
|
||||
to determine two things: 1) whether or not a proof is required at this point in
|
||||
time, and 2) the random challenge for the proof. Although a host will not be
|
||||
able to predict the exact times at which a proof is required, the frequency of
|
||||
proofs averages out to a value that was agreed upon by the client and host
|
||||
during the request/offer exchange.
|
||||
time, and 2) the random challenge for the proof. Although hosts will not be able
|
||||
to predict the exact times at which proofs are required, the frequency of proofs
|
||||
averages out to a value that was set by the client in the request for storage.
|
||||
|
||||
Hosts have a small period of time in which they are expected to submit a proof.
|
||||
When that time has expired without seeing a proof, validators are able to point
|
||||
out the lack of proof. If a host misses too many proofs, it results into a
|
||||
slashing of its collateral.
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
* [A marketplace for storage
|
||||
durability](https://github.com/status-im/codex-research/blob/main/design/marketplace.md)
|
||||
(design document)
|
||||
* [Timing of Storage
|
||||
Proofs](https://github.com/status-im/codex-research/blob/main/design/storage-proof-timing.md)
|
||||
(design document)
|
||||
|
||||
To Do
|
||||
-----
|
||||
|
||||
|
@ -107,10 +120,10 @@ To Do
|
|||
Because the actual proof of retrievability algorithm hasn't been determined yet
|
||||
we're using a dummy algorithm for now.
|
||||
|
||||
* Contract take-over
|
||||
* Contract repair
|
||||
|
||||
Allow another host to take over a contract when the original host missed too
|
||||
many proofs.
|
||||
Allow another host to take over a slot in the contract when the original
|
||||
host missed too many proofs.
|
||||
|
||||
* Reward validators
|
||||
|
||||
|
|
Loading…
Reference in New Issue