Conversation
b9689f1 to
0f0f830
Compare
32d0dbd to
095e90f
Compare
53679b4 to
cfd30bf
Compare
6a7d559 to
957f6ec
Compare
cfd30bf to
8a11e87
Compare
15d50c7 to
55fb29f
Compare
55fb29f to
0bdefa7
Compare
There was a problem hiding this comment.
Great work, big effort! 👏
Generally LGTM, but there are a few critical points that need clarification or addressing, so I will go for the "Request changes" here.
I have gone over the contract changes, still need to see the testing of this, but that will be in round two 😅
AuHau
left a comment
There was a problem hiding this comment.
Nice! Generally LGTM! Just few comment here and there, but nothing blocking ;-)
Thanks again for such a big chunk of work 👏
| await waitUntilStarted(marketplace, request, proof, token) | ||
| await waitUntilFinished(marketplace, requestId(request)) | ||
| await marketplace.freeSlot(slotId(slot)) | ||
| expect(await marketplace.currentCollateral(slotId(slot))).to.equal(0) |
There was a problem hiding this comment.
Maybe add balances checks that verify what happens to the collateral? Eq. burned vs. transfered back? Also for the tests bellow?
There was a problem hiding this comment.
Maybe I'm missing the point, but the balances are checked in the tests right above these tests ("pays out finished request base on time hosted", "pays the host when contract was cancelled" and "pays the host when contract fails and then finishes")
Vault stores balances as uint128
replaced by formal verification with certora
- removes RequestCancelled event, which was not great anyway because it is not emitted at the moment that the request is cancelled
- move all collateral calculatons to separate library
so that they can no longer be transfered within the vault
This state is no longer necessary, vault ensures that payouts happen only once. Hosts could bypass this state anyway by withdrawing from the vault directly.
- changes to marketplace constructor - we no longer have _marketplaceTotals - timestamps have their own type now - freeSlot no longer takes payout addresses - slot state 'Paid' no longer exists - freeSlot can be invoked more than once now - a failed request no longer ends immediately
No need to test the token itself
It is no longer a discount on the collateral, to simplify reasoning about collateral in the sales module of the codex node
So that a storage provider can know how much collateral is returned when it calls freeSlot()
Because a client might still need to call withdraw()
reason: freeSlot() will call forciblyFreeSlot when contract is not finished, so we can use that instead
reason: hosts are paid for the time that they hosted the slot up until the time that the request failed Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
reason: the function only depends on the request, and it is similar to the pricePerSlotPerSecond function Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
1ca2091 to
4410941
Compare
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
Uses the vault for all token transfers in the marketplace. The marketplace now no longer keeps any funds itself.
This has impact on the following as well:
Timestamp,DurationandTokensPerSecondon the API