Aleksander Kryukov
ae94d1ebf3
try to hook on _funds. fixed required
2025-06-12 15:59:40 +02:00
Mark Spanbroek
b5ab3869b9
marketplace: better tests for repair
...
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-12 15:50:09 +02:00
Mark Spanbroek
d7554ce0d2
marketplace: improve withdraw test
...
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-12 08:05:24 +02:00
Mark Spanbroek
4410941061
marketplace: add test for hosts that makes request fail
...
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-11 17:00:52 +02:00
Mark Spanbroek
cd8b6572f3
marketplace: fix test
...
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-11 17:00:24 +02:00
Mark Spanbroek
075d97e5da
marketplace: clarify why we flow & transfer funds before burning
...
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-11 16:31:58 +02:00
Mark Spanbroek
895e36fbba
marketplace: clarify why we flow funds from client to itself
...
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-11 16:31:58 +02:00
Mark Spanbroek
bdee8de9cc
marketplace: move collateralPerSlot() to Requests.sol
...
reason: the function only depends on the request, and it is similar
to the pricePerSlotPerSecond function
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-11 16:31:58 +02:00
Mark Spanbroek
1fb3d2130b
marketplace: cleanup
...
Co-Authored-By: Adam Uhlíř <adam@uhlir.dev>
2025-06-11 16:31:58 +02:00
Mark Spanbroek
724344cb5e
marketplace: allow slot payout for failed requests
...
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>
2025-06-11 16:31:58 +02:00
Mark Spanbroek
2cd45214cf
marketplace: no longer expose forciblyFreeSlot in tests
...
reason: freeSlot() will call forciblyFreeSlot when contract is not
finished, so we can use that instead
2025-06-11 16:31:58 +02:00
Mark Spanbroek
47f3c1e36d
marketplace: keep request in myRequests when freeing slot
...
Because a client might still need to call withdraw()
2025-06-11 16:31:58 +02:00
Mark Spanbroek
9603025202
marketplace: simplify requestEnd()
2025-06-11 16:31:58 +02:00
Mark Spanbroek
7a566182d5
marketplace: re-instate currentCollateral()
...
So that a storage provider can know how much collateral is
returned when it calls freeSlot()
2025-06-11 16:31:58 +02:00
Mark Spanbroek
6971766b62
marketplace: cleanup tests
2025-06-11 16:31:58 +02:00
Mark Spanbroek
6bd4144714
marketplace: repair reward is paid out at the end
...
It is no longer a discount on the collateral, to
simplify reasoning about collateral in the sales
module of the codex node
2025-06-11 16:31:58 +02:00
Mark Spanbroek
e4348de891
certora: update state changes spec now that we have vault
2025-06-11 16:31:58 +02:00
Mark Spanbroek
51862f67e9
certora: remove check on ERC20 token
...
No need to test the token itself
2025-06-11 16:31:58 +02:00
Mark Spanbroek
2d21d65624
certora: update marketplace spec now that we have vault
...
- 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
2025-06-11 16:31:58 +02:00
Mark Spanbroek
52cf22789c
proofs: use Timestamp instead of uint64
2025-06-11 16:31:56 +02:00
Mark Spanbroek
468bc2e833
marketplace: remove 'Paid' state
...
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.
2025-06-11 16:29:21 +02:00
Mark Spanbroek
5fb63c4939
marketplace: cleanup
2025-06-11 16:29:21 +02:00
Mark Spanbroek
06a9e417b2
marketplace: remove accounting that is now done by vault
2025-06-11 16:29:21 +02:00
Mark Spanbroek
e60ff36202
marketplace: formatting
2025-06-11 16:29:21 +02:00
Mark Spanbroek
17646f15b9
marketplace: designate validator rewards
...
so that they can no longer be transfered
within the vault
2025-06-11 16:29:21 +02:00
Mark Spanbroek
b6f5d65630
marketplace: transfer repair reward in vault
2025-06-11 16:29:21 +02:00
Mark Spanbroek
5c9910d29d
marketplace: optimize storage reads and writes
2025-06-11 16:29:21 +02:00
Mark Spanbroek
5e8031eda5
marketplace: remove accounting that is now done by vault
2025-06-11 16:29:21 +02:00
Mark Spanbroek
c626372d55
marketplace: burn tokens in vault when slashing
...
- move all collateral calculatons to separate library
2025-06-11 16:29:21 +02:00
Mark Spanbroek
3ea02914fa
marketplace: simplify withdrawing by client
...
- removes RequestCancelled event, which was not great anyway
because it is not emitted at the moment that the request is
cancelled
2025-06-11 16:29:21 +02:00
Mark Spanbroek
9570404fba
marketplace: remove accounting that is now done by vault
2025-06-11 16:29:21 +02:00
Mark Spanbroek
15c58e1a81
marketplace: remove fuzzing
...
replaced by formal verification with certora
2025-06-11 16:29:21 +02:00
Mark Spanbroek
761fbd4f84
marketplace: collateral is uint128
...
Vault stores balances as uint128
2025-06-11 16:29:21 +02:00
Mark Spanbroek
4f45856a5e
marketplace: use Timestamp, Duration and TokensPerSecond types
2025-06-11 16:29:19 +02:00
Mark Spanbroek
ccf91075bf
vault: move Timestamp and TokensPerSecond libraries one level up
2025-06-11 16:29:13 +02:00
Mark Spanbroek
0910c83428
marketplace: use vault in marketplace
2025-06-11 16:29:13 +02:00
Mark Spanbroek
6ebed47327
marketplace: remove support for changing payout addresses
2025-06-11 16:29:13 +02:00
Mark Spanbroek
aee61bdb45
marketplace: deploy vault and set it in the marketplace
2025-06-11 16:29:13 +02:00
Mark Spanbroek
341b303789
marketplace: use SafeERC20 for transfers
2025-06-11 16:29:11 +02:00
Dmitriy Ryajov
08e91c2443
chore(hardhat): bumping hardhat to v2.24.2 ( #245 )
...
* bumping hardhat to v2.24.2
* Ensure to get the next block timestamp
---------
Co-authored-by: Arnaud <arnaud@status.im>
2025-06-09 11:25:00 -07:00
Ben Bierens
4b2fc07ca9
chore: Updates zkey archive to include graph file ( #246 )
2025-06-09 09:45:19 +02:00
Eric
3661376327
fix(integration): fixes hardhat not recognising custom error ( #243 )
...
Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
2025-06-05 12:42:01 -07:00
Adam Uhlíř
06c76e59b5
build: docker uses npm ci ( #244 )
2025-06-05 10:25:12 +02:00
Arnaud
aee91f1ac4
chore: add a new canMarkProofAsMissing function ( #229 )
...
* Add a new canProofBeMarkedAsMissing function
* Rename modifier
* Rename canProofBeMarkedAsMissing to canMarkProofAsMissing
2025-06-03 09:06:57 +02:00
Slava
b5ca8a61db
chore: codex_testnet deployment artifacts ( #241 )
...
https://github.com/codex-storage/nim-codex/issues/1241
2025-05-30 12:30:12 +03:00
markspanbroek
470a4df415
fix(vault): do no allow reuse of fund ids ( #238 )
...
* fix(vault): do no allow reuse of fund ids
Fixes an attack where all tokens can be drained from
the Vault by allowing a token flow to persist after
a Fund is deleted.
* chore(vault): update state diagram
2025-05-19 10:23:01 +00:00
Adam Uhlíř
a1680df42e
fix: avoid redeploying token contract ( #236 )
2025-05-15 09:49:38 +00:00
Slava
8d19f7650b
chore: codex_testnet deployment artifacts ( #237 )
...
https://github.com/codex-storage/nim-codex/issues/1203
2025-05-15 04:24:53 +00:00
Eric
92537a5120
fix(slot reservations): clear AddressSet instead of delete ( #235 )
...
* fix(slot-reservations): Allows slot to be reserved when in repair
Previous to when SlotState.Repair was implemented, slots in repair would be considered free and the slots could be reserved in this state. Now that SlotState.Repair has been implemented, the `canReserveSlot` needs to check that the SlotState is in Repair or is Free before allowing reservation.
* fix(slot reservations): clear AddressSet instead of delete
Deleting an AddressSet causes corrupted memory. Each address must be removed individually, which is OK to do since there is a maxReservations parameter that keeps this number small.
https://docs.openzeppelin.com/contracts/5.x/api/utils#EnumerableSet
* Switch to EnumerableSet clear function provided by openzeppelin
---------
Co-authored-by: Arnaud <arnaud@status.im>
2025-05-15 11:40:14 +10:00
Eric
baded845f3
fix(slot-reservations): Allows slot to be reserved when in repair ( #234 )
...
Previous to when SlotState.Repair was implemented, slots in repair would be considered free and the slots could be reserved in this state. Now that SlotState.Repair has been implemented, the `canReserveSlot` needs to check that the SlotState is in Repair or is Free before allowing reservation.
2025-05-15 11:37:50 +10:00