Mark Spanbroek
682b65b24a
vault: extract common tests for unlocked funds
2025-03-04 09:36:00 +01:00
Mark Spanbroek
4533c82011
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-03-04 09:36:00 +01:00
Mark Spanbroek
b076528e1a
vault: reduce size of timestamp further
2025-03-04 09:36:00 +01:00
Mark Spanbroek
6980acd59b
vault: rename error
2025-03-04 09:36:00 +01:00
Mark Spanbroek
026609e3c7
vault: remove _getAccount()
...
- no longer calculate flow updates when not needed
- use account.update(timestamp) where needed
- use _getBalance() to view current balance
2025-03-04 09:36:00 +01:00
Mark Spanbroek
a83a6f4cad
vault: fix transfer to self
2025-03-04 09:36:00 +01:00
Mark Spanbroek
450e5308d9
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-03-04 09:36:00 +01:00
Mark Spanbroek
297ec7f6b3
vault: cleanup
2025-03-04 09:36:00 +01:00
Mark Spanbroek
f9464f9118
vault: combine Account and Flow structs
2025-03-04 09:36:00 +01:00
Mark Spanbroek
5d3683383d
vault: do not delete lock when burning
2025-03-04 09:36:00 +01:00
Mark Spanbroek
2600578b48
vault: formatting
2025-03-04 09:36:00 +01:00
Mark Spanbroek
ee6d56a54b
vault: reordering
2025-03-04 09:36:00 +01:00
Mark Spanbroek
16f853b5d8
vault: simplify _getAccount()
2025-03-04 09:36:00 +01:00
Mark Spanbroek
bdc721bfaa
vault: _getAccount updates to the latest timestamp
2025-03-04 09:36:00 +01:00
Mark Spanbroek
2108f1265a
vault: combine account and flow mappings
2025-03-04 09:36:00 +01:00
Mark Spanbroek
68d93fa5b5
vault: rename balance -> account
2025-03-04 09:36:00 +01:00
Mark Spanbroek
fdc642b1df
vault: rename context -> fund
2025-03-04 09:36:00 +01:00
Mark Spanbroek
f64c373e8f
vault: reorder functions
...
in roughly chronological order
2025-03-04 09:36:00 +01:00
Mark Spanbroek
6e531f2087
vault: only allow deposit, transfer, etc when locked
2025-03-04 09:36:00 +01:00
Mark Spanbroek
3864559d85
vault: reorder tests
2025-03-04 09:36:00 +01:00
Mark Spanbroek
33b61f1bf6
vault: cleanup
2025-03-04 09:36:00 +01:00
Mark Spanbroek
f26cb9c04d
vault: delete lock all tokens are withdrawn or burned
2025-03-04 09:36:00 +01:00
Mark Spanbroek
140917eed3
vault: document setAutomine()
2025-03-04 09:36:00 +01:00
Mark Spanbroek
d0b8f961b2
vault: disallow designating of flowing tokens
2025-03-04 09:36:00 +01:00
Mark Spanbroek
4c6c68f9d9
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-03-04 09:36:00 +01:00
Mark Spanbroek
c1031d3b07
vault: delete flow when burning or withdrawing
2025-03-04 09:36:00 +01:00
Mark Spanbroek
a0e3a51b37
vault: cannot burn flowing tokens
2025-03-04 09:36:00 +01:00
Mark Spanbroek
82d490c8d0
vault: disallow transfer of flowing tokens
2025-03-04 09:36:00 +01:00
Mark Spanbroek
687c78a56f
vault: simplify example flow rates in test
2025-03-04 09:36:00 +01:00
Mark Spanbroek
9cb049d6a4
vault: allow flows to be diverted to others
2025-03-04 09:36:00 +01:00
Mark Spanbroek
f0da7cd918
vault: check Lock invariant before writing
2025-03-04 09:36:00 +01:00
Mark Spanbroek
220b648758
vault: change flows over time
2025-03-04 09:36:00 +01:00
Mark Spanbroek
41005cf42c
vault: make tests a bit more robust
2025-03-04 09:36:00 +01:00
Mark Spanbroek
eff9cc1acb
vault: reject negative flows
2025-03-04 09:36:00 +01:00
Mark Spanbroek
db8b06a51b
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-03-04 09:36:00 +01:00
Mark Spanbroek
4f880bb08a
vault: improve naming of public functions
2025-03-04 09:36:00 +01:00
Mark Spanbroek
a18fbb8899
vault: allow automine to be disabled in time sensitive tests
2025-03-04 09:36:00 +01:00
Mark Spanbroek
dc4e277a20
vault: do not allow flow when lock already expired
2025-03-04 09:36:00 +01:00
Mark Spanbroek
b270a0355f
vault: reject flow when insufficient tokens available
2025-03-04 09:36:00 +01:00
Mark Spanbroek
f8fb23a8dd
vault: stop flowing when lock expires
2025-03-04 09:36:00 +01:00
Mark Spanbroek
b3964cd1f0
vault: use custom operators to improve readability
2025-03-04 09:36:00 +01:00
Mark Spanbroek
1d3e2fd4a3
vault: move flow accumulation calculation into VaultBase
2025-03-04 09:36:00 +01:00
Mark Spanbroek
40e6f1cdcc
vault: designate tokens that flow
2025-03-04 09:36:00 +01:00
Mark Spanbroek
7403886283
vault: flow tokens from one recipient to the other
2025-03-04 09:36:00 +01:00
Mark Spanbroek
606cfc4c1e
vault: allow recipient to withdraw
2025-03-04 09:36:00 +01:00
Mark Spanbroek
b64b65a692
vault: further test for locks
2025-03-04 09:36:00 +01:00
Mark Spanbroek
cbbcad5166
vault: remove duplication in tests
2025-03-04 09:36:00 +01:00
Mark Spanbroek
6dbbdb5bd3
vault: simplify test setup
2025-03-04 09:36:00 +01:00
Mark Spanbroek
16a8b020bc
vault: lock is deleted upon withdrawal
2025-03-04 09:36:00 +01:00
Mark Spanbroek
caf86d184e
vault: lock up tokens until expiry time
2025-03-04 09:36:00 +01:00