Commit Graph

28 Commits

Author SHA1 Message Date
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
Adam Uhlíř 57e8cd5013
feat: expiry specified as duration (#99) 2024-05-06 15:13:32 +02:00
Mark Spanbroek 327ae14112 Formatting with prettier 2024-01-25 13:08:10 +01:00
Adam Uhlíř 14e453ac31
feat: partial payouts for cancelled requests (#69) 2023-10-16 11:14:02 +02:00
Adam Uhlíř dfdbd16d5b
feat: collateral per slot (#44) 2023-03-08 12:02:34 +01:00
Mark Spanbroek c8dda37300 [marketplace] introduce SlotState
- replace proofEnd() by slotState()
- replace _slotAcceptsProofs() by slotState()
- remove _stopRequiringProofs()
2023-01-23 15:10:23 +01:00
Mark Spanbroek d5d4dba442 [marketplace] Add missing tests for freeSlot()
Removes unnecessary double removal from slotsPerHost.
2022-12-22 10:29:06 +01:00
Mark Spanbroek 6e0dfdf7db [marketplace] Rename _freeSlot() -> _forciblyFreeSlot() 2022-12-22 10:29:06 +01:00
Eric Mastro 47bf5d37cf remove slot from waitUntilStarted signature 2022-12-22 10:29:06 +01:00
Eric Mastro 61b8f5fc35
[test] Remove lastSlot return from waitUntilStarted
This is a remnant from a staggered ending of slots. All slots will end at the request end time now, and thus this is no longer needed.
2022-10-26 13:37:30 +11:00
Mark Spanbroek 9a6a321d5b [marketplace] Add method to get request end time 2022-10-25 14:49:37 +02:00
Eric Mastro fd74268a8a Remove proof extension, test clean up
1. Remove proof extension as it is not needed. Host are required to provide proofs from the moment they fill a slot, for the duration specified by the contract. This means that the ending of their requirements will be staggered at the end, as they were at the start, but this is more predicable for determining the cost of a request.
2. The proof end time was modified so that if the request state is not accepting proofs, it takes the min of the slot proof end time, the request end time, or block.timestamp - 1, which ensures that it returns a time in the past. If the slot is accepting proofs, it returns the slot end time.
3. Modify marketplace tests so that `waitUntilFinished` advances time to the proof ending of the last slot filled.
2022-10-25 12:38:19 +11:00
Eric Mastro 321132b6fa clean up tests
1. Replace all instances of `now()` with `await currentTime()` to get a more accurate representation of time from the block timestamp. Update examples.js to be async.
2. Move `RequestState` to `marketplace.js`
3. Delete `TestStorage` as `slashAmount` function no longer needed.
2022-10-25 12:38:19 +11:00
Eric Mastro ad040cfee6 [marketplace] extend proof ending
Allow proof ending to be extending once a contract is started, so that all filled slots share an ending time that is equal to the contract end time. Added tests.

Add a mapping for proof id to endId so that proof expectations can be extended for all proofs that share a given endId.

Add function modifiers that require the request state to allow proofs, with accompanying tests.

General clean up of each function’s request state context, with accompanying tests.

General clean up of all tests, including state change “wait” functions and normalising the time advancement functions.
2022-10-25 12:38:19 +11:00
Eric Mastro 087c13a7fc update fillSlot and freeSlot state requirements
`fillSlot` and `freeSlot` must both be in a state of New or Started and not Cancelled (Finished to be added later).

Update tests to support the above.
2022-09-21 20:52:44 +10:00
Eric Mastro 9050a0d52d [marketplace] address PR comments
- reordered some tests
- add RequestState export
- change test descriptions to start with “it”
2022-09-21 20:52:44 +10:00
Eric Mastro 2b8c8fc42a [marketplace] tests for Failed state 2022-09-21 20:52:44 +10:00
Eric Mastro 8be756808c [marketplace] address various PR comments
- Remove `FundsWithdrawn` event
- do not copy request to memory
- todo for changing withdraw amount to not include proof payments
- test lock expiry border
- in tests, move `RequestState` to exported const in marketplace.js
- move test for state checks on `fillSlot` to the “filling a slot” section.
2022-09-20 15:59:03 +10:00
Eric Mastro 37004e0e1f [marketplace] Allow client to withdraw when cancelled
Adds ability for client to withdraw funds from a cancelled storage request.

Tests to check if request has timed out, if the client address is requesting withdraw, if the request state is new, and the funds were successfully transferred.
2022-09-20 15:59:03 +10:00
Mark Spanbroek e818d70b85 Remove Contracts in favor of Marketplace 2022-03-15 10:01:12 +01:00
Mark Spanbroek 78755ecaa2 Format using prettier 2022-02-10 07:46:03 +01:00
Mark Spanbroek 0fedd8875f Use standard ABI encoding instead of the non-standard
packing mode.
2021-11-24 11:43:31 +01:00
Mark Spanbroek 5eb571fe1c Use 'request' and 'bid' objects in tests 2021-11-02 09:45:49 +01:00
Mark Spanbroek c3e85c675a Use bid hash as contract id
Adds nonce to storage request to ensure uniqueness.
2021-10-20 14:30:31 +02:00
Mark Spanbroek 47f0746f06 Add expiration time to bids 2021-10-18 15:31:19 +02:00
Mark Spanbroek 04b2a31f74 Add hash of data that is to be stored to the contract 2021-10-14 14:49:29 +02:00
Mark Spanbroek 23a4b84816 Add proof period and timeout to request for storage 2021-10-14 14:01:28 +02:00
Mark Spanbroek 6ef71f0419 Introduces StorageContract
A StorageContract can only be instantiated when a request
for storage and a bid have been signed.
2021-10-12 16:59:34 +02:00