523 Commits

Author SHA1 Message Date
Mark Spanbroek
9833bd6498 vault: clean up errors 2025-02-06 16:33:03 +01:00
Mark Spanbroek
0e6d4651a9 vault: test lock state transitions 2025-02-06 16:33:03 +01:00
Mark Spanbroek
0f1dbc314b vault: formatting 2025-02-06 16:33:03 +01:00
Mark Spanbroek
0915fa33f1 vault: do not expose Lock internals on public api 2025-02-06 16:33:03 +01:00
Mark Spanbroek
dbaaae8c22 vault: transfer tokens to 0xdead when fund is burned 2025-02-06 16:33:03 +01:00
Mark Spanbroek
94fd9a0f17 vault: burn entire fund 2025-02-06 16:33:03 +01:00
Mark Spanbroek
62a050fb79 vault: extract common tests for unlocked funds 2025-02-06 16:33:03 +01:00
Mark Spanbroek
8b2d726a2f vault: prevent approval hijacking
- transfer ERC20 funds into the vault from the
  controller, not from the user
- prevents an attacker from hijacking a user's
  ERC20 approval to move tokens into a part of
  the vault that is controlled by the attacker
2025-02-06 16:33:03 +01:00
Mark Spanbroek
3064b1468c vault: reduce size of timestamp further 2025-02-06 16:33:03 +01:00
Mark Spanbroek
0237b640e7 vault: rename error 2025-02-06 16:33:03 +01:00
Mark Spanbroek
a2af8c0512 vault: remove _getAccount()
- no longer calculate flow updates when not needed
- use account.update(timestamp) where needed
- use _getBalance() to view current balance
2025-02-06 16:33:03 +01:00
Mark Spanbroek
f6fb441dec vault: fix transfer to self 2025-02-06 16:33:03 +01:00
Mark Spanbroek
523544a4e8 vault: split flow into incoming and outgoing
- no need to deal with signed integers anymore
- allows flow to self to designate tokens over time
2025-02-06 16:33:03 +01:00
Mark Spanbroek
f4cfcd3767 vault: cleanup 2025-02-06 16:33:03 +01:00
Mark Spanbroek
8f5e0f14f8 vault: combine Account and Flow structs 2025-02-06 16:33:03 +01:00
Mark Spanbroek
25d9c15ca7 vault: do not delete lock when burning 2025-02-06 16:33:03 +01:00
Mark Spanbroek
b09f742944 vault: formatting 2025-02-06 16:33:03 +01:00
Mark Spanbroek
95b9ca6fc6 vault: reordering 2025-02-06 16:33:03 +01:00
Mark Spanbroek
8f6190b371 vault: simplify _getAccount() 2025-02-06 16:33:03 +01:00
Mark Spanbroek
374bced5f5 vault: _getAccount updates to the latest timestamp 2025-02-06 16:33:03 +01:00
Mark Spanbroek
c8704cc3af vault: combine account and flow mappings 2025-02-06 16:33:03 +01:00
Mark Spanbroek
56cd4bcfc5 vault: rename balance -> account 2025-02-06 16:33:03 +01:00
Mark Spanbroek
707ec5f55c vault: rename context -> fund 2025-02-06 16:33:03 +01:00
Mark Spanbroek
10839ce532 vault: reorder functions
in roughly chronological order
2025-02-06 16:33:03 +01:00
Mark Spanbroek
2fecf2e741 vault: only allow deposit, transfer, etc when locked 2025-02-06 16:33:03 +01:00
Mark Spanbroek
77d7d5769a vault: reorder tests 2025-02-06 16:33:03 +01:00
Mark Spanbroek
0bd63eafd8 vault: cleanup 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
217bef591e vault: document setAutomine() 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
f90f02cd6d vault: fix flaky time sensitive tests
Ensures that setting of lock and starting of
flow happen in the same block.
Therefore hardhat cannot occasionally increase
the timestamp between the two operations.
This makes predicting the balances over time
much easier.
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
9f22c56026 vault: simplify example flow rates in test 2025-02-06 16:33:03 +01:00
Mark Spanbroek
e9b346a122 vault: allow flows to be diverted to others 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
82467f101d vault: make tests a bit more robust 2025-02-06 16:33:03 +01:00
Mark Spanbroek
9105a3530a vault: reject negative flows 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
6417d5b608 vault: allow automine to be disabled in time sensitive tests 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