Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid zero value transfers #1014

Merged
merged 31 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
6c5069c
feat: block zero transfers for pool tokens (simulate tokens that don'…
EndymionJkb Sep 19, 2024
90ff425
refactor: check amount > 0 in _sendTo, to prevent zero transfers
EndymionJkb Sep 19, 2024
f0cf956
Merge branch 'main' into zero-xfer-v2
EndymionJkb Sep 23, 2024
d5d0010
Merge branch 'main' into zero-xfer-v2
EndymionJkb Sep 26, 2024
6f69649
feat: protect router against zero transfers
EndymionJkb Sep 26, 2024
29b0de2
test: protect hooks against zero transfers
EndymionJkb Sep 26, 2024
ed9c989
chore: update bytecode
EndymionJkb Sep 26, 2024
175b654
chore: update gas
EndymionJkb Sep 26, 2024
68b527a
feat: also prevent 0 ETH transfers
EndymionJkb Sep 26, 2024
a148d76
chore: update bytecode
EndymionJkb Sep 26, 2024
7858591
chore: update gas
EndymionJkb Sep 26, 2024
1d89cfc
Merge branch 'main' into zero-xfer-v2
EndymionJkb Sep 26, 2024
08427db
Merge branch 'main' into zero-xfer-v2
EndymionJkb Sep 27, 2024
4e25851
Merge branch 'main' into zero-xfer-v2
EndymionJkb Sep 27, 2024
5a1199c
Merge branch 'main' into zero-xfer-v2
EndymionJkb Sep 28, 2024
87b44a3
refactor: revert change to main Vault - don't check in `sendTo` - try…
EndymionJkb Sep 29, 2024
106a93f
refactor: Router changes to avoid calling Vault functions that would …
EndymionJkb Sep 29, 2024
d85dcfd
chore: update bytecode
EndymionJkb Sep 29, 2024
8e148ac
refactor: avoid making Vault calls in the test framework that do zero…
EndymionJkb Sep 29, 2024
f70d306
test: update tests to avoid zero transfers
EndymionJkb Sep 29, 2024
b562bac
chore: update gas
EndymionJkb Sep 29, 2024
78a2808
lint
EndymionJkb Sep 29, 2024
51ec01c
refactor: don't need to check for zero transfer of weth
EndymionJkb Sep 29, 2024
976b94f
chore: update bytecode
EndymionJkb Sep 29, 2024
cd2c1b5
Merge branch 'main' into zero-xfer-v2
EndymionJkb Oct 1, 2024
40f6b35
refactor: don't call settle with 0
EndymionJkb Oct 1, 2024
99f8951
test: update settle in test
EndymionJkb Oct 1, 2024
0c3947b
chore: update bytecode
EndymionJkb Oct 1, 2024
4ed09f9
chore: update gas
EndymionJkb Oct 1, 2024
2ff038b
Merge branch 'main' into zero-xfer-v2
EndymionJkb Oct 1, 2024
1809aef
refactor: remove unnecessary checks
EndymionJkb Oct 1, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1 +1 @@
304.6k
304.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
248.2k
248.0k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
343.3k
335.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
269.5k
261.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
214.6k
197.7k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
199.2k
182.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
214.2k
194.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
233.5k
213.7k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
181.5k
181.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
179.6k
179.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
192.6k
171.9k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
214.4k
214.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
168.0k
167.6k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
181.9k
168.5k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
191.7k
178.3k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
179.4k
179.3k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
165.5k
165.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
236.4k
219.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
220.9k
204.0k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
235.7k
215.9k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
255.0k
235.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
228.7k
228.6k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
235.0k
234.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
211.8k
193.7k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
230.8k
230.7k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
223.2k
222.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
200.9k
190.0k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
210.7k
199.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
212.7k
212.6k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
182.3k
182.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
178.4k
178.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
347.6k
347.5k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
299.5k
299.3k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
234.7k
234.5k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
329.9k
321.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
256.1k
248.0k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
208.3k
191.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
185.9k
169.0k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
200.9k
181.1k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
233.6k
213.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
179.6k
179.4k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
179.3k
158.7k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
213.0k
212.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
168.0k
167.6k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
168.6k
155.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
191.7k
178.3k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
169.1k
168.9k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
152.0k
151.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
230.2k
213.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
207.7k
190.7k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
222.4k
202.6k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
255.1k
235.3k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
218.4k
218.3k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
184.2k
184.1k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
235.0k
234.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
198.6k
180.5k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
229.7k
229.5k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
223.2k
222.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
187.6k
176.7k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
210.7k
199.8k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
202.4k
202.3k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
168.2k
168.1k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
178.4k
178.2k
Original file line number Diff line number Diff line change
@@ -1 +1 @@
348.9k
348.8k
19 changes: 19 additions & 0 deletions pkg/solidity-utils/contracts/test/ERC20TestToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract ERC20TestToken is ERC20 {
uint8 private immutable _decimals;

/// @dev Simulate tokens that don't allow zero transfers.
error ZeroTransfer();

constructor(string memory name, string memory symbol, uint8 decimals_) ERC20(name, symbol) {
_decimals = decimals_;
}
Expand All @@ -22,4 +25,20 @@ contract ERC20TestToken is ERC20 {
function burn(address sender, uint256 amount) external {
_burn(sender, amount);
}

function transfer(address to, uint256 value) public override returns (bool) {
if (value == 0) {
revert ZeroTransfer();
}

return super.transfer(to, value);
}

function transferFrom(address from, address to, uint256 value) public override returns (bool) {
if (value == 0) {
revert ZeroTransfer();
}

return super.transferFrom(from, to, value);
}
}
8 changes: 5 additions & 3 deletions pkg/vault/contracts/Router.sol
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ contract Router is IRouter, RouterCommon, ReentrancyGuardTransient {
// Transfer WETH from the Router to the Vault.
_weth.transfer(address(_vault), amountIn);
_vault.settle(_weth, amountIn);
} else {
} else if (amountIn > 0) {
EndymionJkb marked this conversation as resolved.
Show resolved Hide resolved
// Transfer tokens from the user to the Vault.
// Any value over MAX_UINT128 would revert above in `initialize`, so this SafeCast shouldn't be
// necessary. Done out of an abundance of caution.
Expand Down Expand Up @@ -298,7 +298,7 @@ contract Router is IRouter, RouterCommon, ReentrancyGuardTransient {
_weth.deposit{ value: amountIn }();
_weth.transfer(address(_vault), amountIn);
_vault.settle(_weth, amountIn);
} else {
} else if (amountIn > 0) {
EndymionJkb marked this conversation as resolved.
Show resolved Hide resolved
// Any value over MAX_UINT128 would revert above in `addLiquidity`, so this SafeCast shouldn't be
// necessary. Done out of an abundance of caution.
_permit2.transferFrom(params.sender, address(_vault), amountIn.toUint160(), address(token));
Expand Down Expand Up @@ -496,7 +496,9 @@ contract Router is IRouter, RouterCommon, ReentrancyGuardTransient {
}

// Send ETH to sender.
payable(params.sender).sendValue(ethAmountOut);
if (ethAmountOut > 0) {
payable(params.sender).sendValue(ethAmountOut);
}
}

/**
Expand Down
Loading
Loading