317 Commits

Author SHA1 Message Date
Mark Spanbroek
1df6afb132 vault: move flow accumulation calculation into VaultBase 2025-01-22 16:16:55 +01:00
Mark Spanbroek
b3fbc19bf5 vault: designate tokens that flow 2025-01-22 15:58:34 +01:00
Mark Spanbroek
f59ec3d5e2 vault: flow tokens from one recipient to the other 2025-01-22 15:07:51 +01:00
Mark Spanbroek
922121e659 vault: allow recipient to withdraw 2025-01-22 11:59:51 +01:00
Mark Spanbroek
bd9d88443c vault: lock is deleted upon withdrawal 2025-01-22 11:59:51 +01:00
Mark Spanbroek
bfd3c43555 vault: lock up tokens until expiry time 2025-01-22 11:59:51 +01:00
Mark Spanbroek
43f310518f vault: designate tokens for a single recipient 2025-01-22 11:59:51 +01:00
Mark Spanbroek
2412eb092e vault: transfer tokens from one recipient to the other 2025-01-22 11:59:51 +01:00
Mark Spanbroek
69b2b4fd90 vault: burning funds 2025-01-22 11:59:51 +01:00
Mark Spanbroek
7e6bc18b19 vault: change data structure to be recipient oriented 2025-01-22 11:59:51 +01:00
Mark Spanbroek
5a2e183610 vault: deposit and withdraw 2025-01-22 11:59:51 +01:00
Mark Spanbroek
44fcab0fc5 update solidity to version 0.8.28 2025-01-22 11:59:51 +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
r4bbit
e62ebf6b0e
fix: ensure requestStorage() reverts if maxSlotloss > slots (#140) 2024-08-05 10:58:51 +02:00
r4bbit
688a8ed929
Set up certora and implement first rules (#122)
Co-authored-by: 0xb337r007 <0xe4e5@proton.me>
Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
2024-07-24 18:50:18 +02:00
Adam Uhlíř
57e8cd5013
feat: expiry specified as duration (#99) 2024-05-06 15:13:32 +02:00
Mark Spanbroek
53999c74d3 Provide all gas to precompiles
Rationale: subtracting 2000 from the provided gas seems
arbitrary, and doesn't provide any benefits. Whether
verify() fails with an out-of-gas error, or returns
'false', in both cases the proof is not verified.

Co-Authored-By: Balazs Komuves <bkomuves@gmail.com>
2024-03-13 15:25:59 +01:00
Mark Spanbroek
84eba26f76 Document that group elements are checked by precompiles
Co-Authored-By: Balazs Komuves <bkomuves@gmail.com>
2024-03-13 15:25:59 +01:00
Mark Spanbroek
c55b34fc76 uint -> uint256
Co-Authored-By: Balazs Komuves <bkomuves@gmail.com>
2024-03-13 15:25:59 +01:00
Mark Spanbroek
3b6f7b8ec7 Rename _Q -> _R
Using 'r' for the size of the scalar field is
standard practice.

Co-Authored-By: Balazs Komuves <bkomuves@gmail.com>
2024-03-13 15:25:59 +01:00
Mark Spanbroek
ab1b91fe49 Return false when incorrect amount of public inputs 2024-03-13 15:25:59 +01:00
Mark Spanbroek
bd489c7f9a Groth16Verifier implements its interface 2024-03-13 15:25:59 +01:00
Mark Spanbroek
f9637f192b Rename: vkX -> combination 2024-03-13 15:25:59 +01:00
Mark Spanbroek
a4ce10f4de One less addition 2024-03-13 15:25:59 +01:00
Mark Spanbroek
df58f2d3db Formatting 2024-03-13 15:25:59 +01:00
Mark Spanbroek
576254423e Return false when public inputs are invalid 2024-03-13 15:25:59 +01:00
Mark Spanbroek
d38e0f5954 make functions private 2024-03-13 15:25:59 +01:00
Mark Spanbroek
b676b245d6 Improve argument names 2024-03-13 15:25:59 +01:00
Mark Spanbroek
235f11a863 Primes are named as in EIP-197 2024-03-13 15:25:59 +01:00
Mark Spanbroek
a4777bade5 Reordering, formatting 2024-03-13 15:25:59 +01:00
Mark Spanbroek
c7687c5b83 Remove library 2024-03-13 15:25:59 +01:00
Mark Spanbroek
3840e2bf92 Remove unnecessary if-statement 2024-03-13 15:25:59 +01:00
Mark Spanbroek
949909fd98 Simpify pairing check 2024-03-13 15:25:59 +01:00
Mark Spanbroek
601ed18455 Verifier returns false when one of the operations fails 2024-03-13 15:25:59 +01:00
Mark Spanbroek
c495770679 Pairing check returns boolean success and outcome 2024-03-13 15:25:59 +01:00
Mark Spanbroek
a97a598b0e Add and multiply return bool success 2024-03-13 15:25:59 +01:00