340 Commits

Author SHA1 Message Date
Mark Spanbroek
2fecf2e741 vault: only allow deposit, transfer, etc when locked 2025-02-06 16:33:03 +01:00
Mark Spanbroek
de3a847d7b vault: delete lock all tokens are withdrawn or burned 2025-02-06 16:33:03 +01:00
Mark Spanbroek
9aecbd54d9 vault: disallow designating of flowing tokens 2025-02-06 16:33:03 +01:00
Mark Spanbroek
63109b813b vault: delete flow when burning or withdrawing 2025-02-06 16:33:03 +01:00
Mark Spanbroek
85537cdb49 vault: cannot burn flowing tokens 2025-02-06 16:33:03 +01:00
Mark Spanbroek
a120cdf2ab vault: disallow transfer of flowing tokens 2025-02-06 16:33:03 +01:00
Mark Spanbroek
d35cc00841 vault: check Lock invariant before writing 2025-02-06 16:33:03 +01:00
Mark Spanbroek
421a1eb5ba vault: change flows over time 2025-02-06 16:33:03 +01:00
Mark Spanbroek
8ee4512080 vault: flow to multiple recipients
- changes balance from uint256 -> uint128
  so that entire Balance can be read or written
  with a single operation
- moves Lock to library
- simplifies lock checks
2025-02-06 16:33:03 +01:00
Mark Spanbroek
9d213993e8 vault: improve naming of public functions 2025-02-06 16:33:03 +01:00
Mark Spanbroek
482ff9a57a vault: do not allow flow when lock already expired 2025-02-06 16:33:03 +01:00
Mark Spanbroek
c6ea2b6bd7 vault: reject flow when insufficient tokens available 2025-02-06 16:33:03 +01:00
Mark Spanbroek
27c7ee32c0 vault: stop flowing when lock expires 2025-02-06 16:33:03 +01:00
Mark Spanbroek
2831546544 vault: use custom operators to improve readability 2025-02-06 16:33:03 +01:00
Mark Spanbroek
be59d77a5f vault: move flow accumulation calculation into VaultBase 2025-02-06 16:33:03 +01:00
Mark Spanbroek
cf750b032c vault: designate tokens that flow 2025-02-06 16:33:03 +01:00
Mark Spanbroek
cf30fa35d6 vault: flow tokens from one recipient to the other 2025-02-06 16:33:03 +01:00
Mark Spanbroek
bfc7a8bb19 vault: allow recipient to withdraw 2025-02-06 16:33:03 +01:00
Mark Spanbroek
84c31418b3 vault: lock is deleted upon withdrawal 2025-02-06 16:33:03 +01:00
Mark Spanbroek
a29778de61 vault: lock up tokens until expiry time 2025-02-06 16:33:03 +01:00
Mark Spanbroek
0dfe60dab9 vault: designate tokens for a single recipient 2025-02-06 16:33:03 +01:00
Mark Spanbroek
3a23ab7a40 vault: transfer tokens from one recipient to the other 2025-02-06 16:33:03 +01:00
Mark Spanbroek
bff9a05e4f vault: burning funds 2025-02-06 16:33:03 +01:00
Mark Spanbroek
1a7b0b5c17 vault: change data structure to be recipient oriented 2025-02-06 16:33:03 +01:00
Mark Spanbroek
2d469dc6d1 vault: deposit and withdraw 2025-02-06 16:33:03 +01:00
Mark Spanbroek
cf96d1a79d update solidity to version 0.8.28 2025-02-06 15:54:41 +01:00
Mark Spanbroek
bc934ba970 simplify time-based logic in tests, and fix requestEnd()
- use the `allowBlocksWithSameTimestamp` hardhat option
- remove block time gymnastics from marketplace tests
- fix erroneous implementation of requestEnd() which
  surfaced because of the the improved tests
2025-02-06 15:51:07 +01:00
Arnaud
51bae145fc
Reward validator when marking missing proof (#209) 2025-01-27 11:33:23 +01:00
Arnaud
6753d20b17
Remove missing proof leniency (#210) 2025-01-27 10:14:53 +00:00
Arnaud
78c15710f3
Remove the mapping _probabilities (#215)
* Remove the mapping _probabilities
* Fix the slot propability calculation test by filling slot only instead of requiring proofs
* Remove custom errorr Proofs_InvalidProbability not used anymore
2025-01-27 10:02:27 +00:00
Marcin Czenko
e74d3397a1
Feat: price per byte (#208)
* changes reward => pricePerByte

* collateral => collateralPerByte

* updates tests

* introduces AskHelpers to compute price and collateral per slot

* adds public view function returning currentCollateral for the slot

* updates names for price and collateral

* uses pricePerSlotPerSecond in maxPriceHelper

* adds collateralPerSlot helper

* makes sure that the intended use of the <<currentCollateral>> view function is demonstrated in tests

* formatting

* fix comment

* mints more tokens so that it can be used with contracts tests in nim-codex

* Renaming <<collateral>> and <<reward>> to <<collateralPerByte>> and <<pricePerBytePerSecond>> respectively (merged in the meantime to the master)
2025-01-24 15:28:29 +01:00
Arnaud
d04acafde2
Add request validations (#213)
* Add request validations
* Apply custom errors
2025-01-24 12:49:06 +01:00
Arnaud
500498f8bc
Replace assert by revert (#216)
* Replace assert with revert
2025-01-24 11:07:55 +01:00
Arnaud
604d4c87eb
Reject when probability is 0 (#212)
* Reject when probability is 0
* Apply custom error
2025-01-24 10:13:45 +01:00
Arnaud
bfa5a78b4f
Verify than secondsPerPeriod cannot be zero (#211)
* Assert than secondsPerPeriod cannot be zero
* Apply custom error
2025-01-24 09:22:21 +01:00
r4bbit
02e3b8d22b
refactor(Marketplace): Use custom errors instead of string messages (#141)
Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
2025-01-15 14:11:40 +01:00
Adam Uhlíř
dfab6102e7
feat: repair reward (#193) 2024-12-12 18:39:42 +01:00
Eric
1ce3d10fa2
fix(slot-reservations): ensure slot is free (#196)
Ensure that the slot state is free before allowing reservations
2024-10-30 15:48:37 +11:00
Eric
7645df19ab
renames config to configuration (#198)
This is not the right reason to be making this kind of change, but a very hard to debug symbol clash in codex for `config`. Changing this to `configuration` is the easiest way to fix the issue.
2024-10-29 19:02:42 +11:00
Adam Uhlíř
7e6187d4b1
feat: hosts payed by actual time hosting a slot (#160)
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
Co-authored-by: r4bbit <445106+0x-r4bbit@users.noreply.github.com>
2024-10-08 09:38:19 +02:00
Eric
f5a54c7ed4
feat(slot-reservations): require slots to be reserved before filling slot (#185)
* Require slots to be reserved before filling slot

* Add test that checks filling slot fails without reservation
2024-10-08 15:55:17 +11:00
Eric
807fc973c8
feat(slot-reservations): Add SlotReservationsFull event (#183)
`SlotReservationsFull` event is emitted once a slot has reached its capacity for slot reservations (3 reservations at this time).

`SlotReservationsFull` event emists `requestId` and `slotIndex`.
2024-10-04 13:28:39 +10:00
Eric
33010bd20c
feat(slot-reservations): Allow slots to be reserved (#177)
* feat(slot-reservations): Allow slots to be reserved

Closes #175.

Allows reservation of slots, without an implementation of the expanding window.

- Add a function called `reserveSlot(address, SlotId)`, that allows three unique addresses per slot to be reserved, that returns bool if successful.
       - Use `mapping(SlotId => EnumerableSet.AddressSet)`
       - Return false if the address could not be added to the set (if `EnumerableSet.add` returns false)
- Add `canReserveSlot(address, SlotId)`
        - Return `true` if set of reservations is less than 3 and the set doesn't already contain the address
        - Return `true` otherwise (for now, later add in logic for checking the address is inside the expanding window)
        - Call `canReserveSlot` from `reserveSlot` as a `require` or invariant
- Add `SlotReservations` configuration struct to the network-level config, with `maxReservations`
2024-10-03 11:01:21 +10:00
r4bbit
cc0b2732ad fix(Marketplace): ensure requests include ask with sufficient slots
There is a missing check in `requestStorage()` on whether the `Request`
contains an `Ask` where its `slots` is `> 0`.

This allows for making storage request without slots. Not harmful but
not a valid state of the system either.

This commit adds that check and a test with batteries included.
2024-08-27 17:14:52 +02:00
r4bbit
3a6249e886 fix(certora): make rule for allowed request state changes work again 2024-08-23 14:01:43 +02:00
Eric
73a2ca0bd3
feat: adds an optional payoutAddress to allow payouts to be paid to separate address (#144)
* initial commit for splitting payouts

Collateral goes to slot's host address, while reward payouts go to the slot's host payoutAddress

* Add fillSlot overload to make payoutAddress "optional"

* add tests for payoutAddress

* add doc to patchFillSlotOverloads

* formatting

* remove optional payoutAddress parameter

* Move payoutAddress to freeSlot

- remove payoutAddress parameter from `fillSlot`
- remove `payoutAddress` from slot struct and storage
- add payoutAddress parameter to `freeSlot`, preventing the need for storage

* formatting

* update certora spec to match updated function signature

* Add withdrawAddress to withdrawFunds

- prevent erc20 msg.sender blacklisting

* Update tests for paying out to withdrawAddress

* formatting

* Add collateralRecipient

* refactor: change withdrawFunds and freeSlot overloads

- `withdrawFunds` now has an option withdrawRecipient parameter
- `freeSlot` now has two optional parameters: rewardRecipient, and collateralRecipient. Both or none must be specified.

* update certora spec for new sigs
2024-08-19 17:09:48 +10:00
Andrea Franz
29f39d52c7
chore(certora): slot's missed periods count should be equal to the count of slot's missing periods set to true (#155) 2024-08-15 12:51:14 +02:00
Eric
ed428767b3
chore: add downtimeProduct configuration parameter (#138)
* add `downtimeProduct` configuration parameter

* formatting
2024-08-14 15:50:32 +10:00
r4bbit
2e3f775a0d chore: formally verify request state changes
This commit adds CVL rule that formally verifies the state changes of
any given request in relation to the functions of the contract that can
cause them.

Closes #128
2024-08-12 15:26:59 +02:00
Adam Uhlíř
fe8da1013d
docs: proofs comments (#118)
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
Co-authored-by: markspanbroek <mark@spanbroek.net>
2024-08-08 09:35:35 +00:00