Luke Parker
19422de231
Ensure a non-zero fee in the Router OutInstruction gas fuzz test
2025-01-27 15:39:55 -05:00
Luke Parker
835b5bb06f
Split tests across a few files, fuzz generate OutInstructions
...
Tests successful gas estimation even with more complex behaviors.
2025-01-27 13:59:11 -05:00
Luke Parker
0484113254
Fix the ability for a malicious adversary to snipe ERC20s out via re-entrancy from the ERC20 contract
2025-01-27 13:07:35 -05:00
Luke Parker
17cc10b3f7
Test Execute result decoding, reentrancy
2025-01-27 13:01:52 -05:00
Luke Parker
7e01589fba
Erc20::approve for DestinationType::Contract
...
This allows the CREATE code to bork without the Serai router losing access to
the coins in question. It does incur overhead on the deployed contract, which
now no longer just has to query its balance but also has to call the
transferFrom, but its a safer pattern and not a UX detriment.
This also improves documentation.
2025-01-27 11:58:39 -05:00
Luke Parker
f8c3acae7b
Check the Router-deployed contracts' code
2025-01-27 07:48:37 -05:00
Luke Parker
0957460f27
Add supporting security commentary to Router.sol
2025-01-27 07:36:23 -05:00
Luke Parker
ea00ba9ff8
Clarified usage of CREATE
...
CREATE was originally intended for gas savings. While one sketch did move to
CREATE2, the security concerns around address collisions (requiring all init
codes not be malleable to achieve security) continue to justify this.
To resolve the gas estimation concerns raised in the prior commit, the
createAddress function has been made constant-gas.
2025-01-27 07:36:13 -05:00
Luke Parker
a9625364df
Test createAddress
...
Benchmarks gas usage
Note the estimator needs to be updated as this is now variable-gas to the
state.
2025-01-27 05:37:56 -05:00
Luke Parker
75c6427d7c
CREATE uses RLP, not ABI-encoding
2025-01-27 04:24:25 -05:00
Luke Parker
e742a6b0ec
Test ERC20 OutInstructions
2025-01-27 02:08:01 -05:00
Luke Parker
5164a710a2
Redo gas estimation via revm
...
Adds a minimal amount of packages. Does add decent complexity. Avoids having
constants which aren't exact, due to things like the quadratic memory cost, and
the issues with such estimates accordingly.
2025-01-26 22:42:50 -05:00
Luke Parker
27c1dc4646
Test ETH address/code OutInstructions
2025-01-24 18:46:17 -05:00
Luke Parker
3892fa30b7
Test an empty execute
2025-01-24 17:13:36 -05:00
Luke Parker
ed599c8ab5
Have the Batch event encode the amount of results
...
Necessary to distinguish a bitvec with 1 results from a bitvec with 7 results.
2025-01-24 17:04:25 -05:00
Luke Parker
29bb5e21ab
Take advantage of RangeInclusive for specifying filters' blocks
2025-01-24 07:44:47 -05:00
Luke Parker
604a4b2442
Add execute_tx to fill in missing test cases reliant on it
2025-01-24 07:33:36 -05:00
Luke Parker
977dcad86d
Test the Router rejects invalid signatures
2025-01-24 07:22:43 -05:00
Luke Parker
cefc542744
Test SeraiKeyWasNone
2025-01-24 06:58:54 -05:00
Luke Parker
164fe9a14f
Test Router's InvalidSeraiKey error
2025-01-24 06:41:24 -05:00
Luke Parker
f948881eba
Simplify async code in in_instructions_unordered
...
Outsources fetching the ERC20 events to top_level_transfers_unordered.
2025-01-24 05:43:04 -05:00
Luke Parker
201b675031
Test ERC20 InInstructions
2025-01-24 03:45:04 -05:00
Luke Parker
3d44766eff
Add ERC20 InInstruction test
2025-01-24 03:23:58 -05:00
Luke Parker
a63a86ba79
Test Ether InInstructions
2025-01-23 09:30:54 -05:00
Luke Parker
e922264ebf
Add selector collisions to the IERC20 lib
2025-01-23 08:25:59 -05:00
Luke Parker
7e53eff642
Fix the async flow with the Router
...
It had sequential async calls with complexity O(n), with a variety of redundant
calls. There was also a constant of... 4? 5? for each item. Now, the total
sequence depth is just 3-4.
2025-01-23 06:16:58 -05:00
Luke Parker
669b8b776b
Work on testing the Router
...
Completes the `Executed` enum in the router. Adds an `Escape` struct. Both are
needed for testing purposes.
Documents the gas constants in intent and reasoning.
Adds modernized tests around key rotation and the escape hatch.
Also updates the rest of the codebase which had accumulated errors.
2025-01-23 02:06:06 -05:00
Luke Parker
6508957cbc
Make a proper nonReentrant modifier
...
A transaction couldn't call execute twice within a single TX prior. Now, it
can.
Also adds a bit more context to the escape hatch events/errors.
2025-01-23 00:04:44 -05:00
Luke Parker
373e794d2c
Check the escaped to address has code set
...
Document choice not to use a confirmation flow there as well.
2025-01-22 22:45:51 -05:00
Luke Parker
c8f3a32fdf
Replace custom read/write impls in router with borsh
2025-01-21 03:49:29 -05:00
Luke Parker
47560fa9a9
Test manually implemented serializations in the Router lib
2025-01-19 00:45:26 -05:00
Luke Parker
0d906363a0
Simplify and test deterministically_sign
2025-01-18 15:13:39 -05:00
Luke Parker
5a42f66dc2
alloy 0.9
2024-12-30 11:09:09 -05:00
Luke Parker
9593a428e3
alloy 0.8
2024-12-11 01:02:58 -05:00
Luke Parker
5b3c5ec02b
Basic Ethereum escapeHatch test
2024-12-09 02:00:17 -05:00
Luke Parker
3192370484
Add Serai key confirmation to prevent rotating to an unusable key
...
Also updates alloy to the latest version
2024-12-08 20:42:37 -05:00
Luke Parker
834c16930b
Add a bitmask of OutInstruction events to Executed
...
Allows explorers to provide clarity on what occurred.
2024-11-02 21:00:01 -04:00
Luke Parker
2920987173
Add a re-entrancy guard to Router.execute
2024-11-02 20:12:48 -04:00
Luke Parker
26230377b0
Define IRouterWithoutCollisions which Router inherits from
...
This ensures Router implements most of IRouterWithoutCollisions. It solely
leaves us to confirm Router implements the extensions defined in IRouter.
2024-11-02 19:10:39 -04:00
Luke Parker
2f5c0c68d0
Add selector collisions to Router to make it IRouter compatible
2024-11-02 18:13:02 -04:00
Luke Parker
8de42cc2d4
Add IRouter
2024-11-02 13:19:07 -04:00
Luke Parker
cf4123b0f8
Update how signatures are handled by the Router
2024-11-02 10:47:09 -04:00
Luke Parker
6a520a7412
Work on testing the Router
2024-10-31 02:23:59 -04:00
Luke Parker
b2ec58a445
Update serai-ethereum-processor to compile
2024-10-30 21:48:40 -04:00
Luke Parker
2a427382f1
Natspec, slither Deployer, Router
2024-10-30 21:35:43 -04:00
Luke Parker
2c8af04781
machete, drain > mem::swap for clarity reasons
2024-09-19 23:36:32 -07:00
Luke Parker
554c5778e4
Don't track deployment block in the Router
...
This technically has a TOCTOU where we sync an Epoch's metadata (signifying we
did sync to that point), then check if the Router was deployed, yet at that
very moment the node resets to genesis. By ensuring the Router is deployed, we
avoid this (and don't need to track the deployment block in-contract).
Also uses a JoinSet to sync the 32 blocks in parallel.
2024-09-19 23:36:32 -07:00
Luke Parker
7e4c59a0a3
Have the Router track its deployment block
...
Prevents a consensus split where some nodes would drop transfers if their node
didn't think the Router was deployed, and some would handle them.
2024-09-19 23:36:32 -07:00
Luke Parker
ae76749513
Transfer ETH with CREATE, not prior to CREATE
...
Saves a few thousand gas.
2024-09-19 23:36:32 -07:00
Luke Parker
bc1bbf9951
Set a fixed fee transferred to the caller for publication
...
Avoids the risk of the gas used by the contract exceeding the gas presumed to
be used (causing an insolvency).
2024-09-19 23:36:32 -07:00