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

feat: Revert style quoter #73

Merged
merged 84 commits into from
Dec 20, 2023
Merged
Changes from 1 commit
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
6313eb5
add PoolTicksCounter library
ConjunctiveNormalForm Nov 6, 2023
664c4ff
quoter exact input single
ConjunctiveNormalForm Nov 7, 2023
d67f597
quoter test
ConjunctiveNormalForm Nov 7, 2023
ee84418
return deltas instead
ConjunctiveNormalForm Nov 10, 2023
d68e464
safe casting to correct types
ConjunctiveNormalForm Nov 11, 2023
bc381b0
QuoteExactInput skeleton
ConjunctiveNormalForm Nov 11, 2023
3bd47d9
multiple entries
ConjunctiveNormalForm Nov 11, 2023
f75b87a
break handleRevert by type
ConjunctiveNormalForm Nov 12, 2023
a69c782
quoteExactInput and unit tests
ConjunctiveNormalForm Nov 15, 2023
4f9519f
more QuoteExactInput tests
ConjunctiveNormalForm Nov 15, 2023
7823167
remove lgos
ConjunctiveNormalForm Nov 15, 2023
e2d0c22
remove commented out struct
ConjunctiveNormalForm Nov 15, 2023
6ba70f4
via-ir in ci
ConjunctiveNormalForm Nov 15, 2023
b093a78
remove unused imports/functions
ConjunctiveNormalForm Nov 16, 2023
69c2c5b
store iteration params locally instead of editing function input
ConjunctiveNormalForm Nov 16, 2023
20af595
pull out sqrtPriceLimit to its own function
ConjunctiveNormalForm Nov 16, 2023
e3f6c7e
PathKey to its own library
ConjunctiveNormalForm Nov 16, 2023
a8a0ed1
rename initializedTicksCrossed to initializedTicksLoaded
ConjunctiveNormalForm Nov 16, 2023
bd22b11
remove manual abi encoding in yul :p
ConjunctiveNormalForm Nov 16, 2023
1e0277b
fix linter warnings for Quoter
ConjunctiveNormalForm Nov 16, 2023
ca62ec2
natspec for IQuoter
ConjunctiveNormalForm Nov 16, 2023
d526f75
feat: update v4-core
marktoda Nov 16, 2023
3e3ab5d
fix: tests
marktoda Nov 16, 2023
c5b8c22
style fixes
ConjunctiveNormalForm Nov 17, 2023
1d8f14f
inheritdoc
ConjunctiveNormalForm Nov 17, 2023
55db578
ExactInSingleBatch
ConjunctiveNormalForm Nov 17, 2023
4fe142c
fix: update tests
marktoda Nov 17, 2023
15a9c8a
fix: test router was borked
marktoda Nov 17, 2023
f12b2c3
exact out
ConjunctiveNormalForm Nov 18, 2023
0dc0c0b
fix: alice comments
marktoda Nov 20, 2023
3665d41
fix ExactOutput
ConjunctiveNormalForm Nov 20, 2023
f432926
add ExactOput unit tests
ConjunctiveNormalForm Nov 21, 2023
eb3441f
add quoteExactOutputBatch
ConjunctiveNormalForm Nov 21, 2023
94f1a20
remove solhint config
ConjunctiveNormalForm Nov 22, 2023
45fd156
remove newline
ConjunctiveNormalForm Nov 22, 2023
57330b2
add QuoteExactOutput in interface
ConjunctiveNormalForm Nov 22, 2023
c841c34
refactor lockAcquired
ConjunctiveNormalForm Nov 22, 2023
a13509b
move magic numbers to constants + doc
ConjunctiveNormalForm Nov 22, 2023
dcd6471
add more natspec
ConjunctiveNormalForm Nov 22, 2023
9fb0ab4
natspec
ConjunctiveNormalForm Nov 28, 2023
3f0e6a7
named imports
ConjunctiveNormalForm Nov 28, 2023
4a8e57a
self-call branching
ConjunctiveNormalForm Dec 4, 2023
b1c2292
remove old code
ConjunctiveNormalForm Dec 4, 2023
238a23e
remove console2 import
ConjunctiveNormalForm Dec 4, 2023
5daedb0
refactor PathKeyLib
ConjunctiveNormalForm Dec 4, 2023
b6a7373
amountOutCached
ConjunctiveNormalForm Dec 4, 2023
ebac179
inherit ILockCallback
ConjunctiveNormalForm Dec 4, 2023
1912701
add base contracts and interfaces (#75)
tinaszheng Nov 28, 2023
b683fe8
Merge branch 'main' into revert-quoter
ConjunctiveNormalForm Dec 4, 2023
7d123ac
remove unused errors
ConjunctiveNormalForm Dec 4, 2023
7bfcffb
test lockAcquired reverts
ConjunctiveNormalForm Dec 5, 2023
54373b1
remove ...Batch interface
ConjunctiveNormalForm Dec 5, 2023
6ecf72b
REASON -> RESPONSE when valid
ConjunctiveNormalForm Dec 5, 2023
a40476e
complete natspec
ConjunctiveNormalForm Dec 5, 2023
7e7b880
remove SwapInfo imports
ConjunctiveNormalForm Dec 5, 2023
cb15b3e
rename to SwapParameters
ConjunctiveNormalForm Dec 6, 2023
710705b
move quoter structs into IQuoter interface
ConjunctiveNormalForm Dec 6, 2023
311ff6f
update to latest core
snreynolds Dec 11, 2023
5f4b717
use prev values
snreynolds Dec 11, 2023
ffe3b05
change twamm to use pool getters
snreynolds Dec 11, 2023
d559965
Merge branch 'main' into update-v4-core
snreynolds Dec 11, 2023
6a72276
changes after merging main
snreynolds Dec 11, 2023
57183bd
use --via-ir in cli
snreynolds Dec 11, 2023
18d68e8
fix formatting
snreynolds Dec 14, 2023
fead64a
fix FullRange/TWAMM hook
snreynolds Dec 14, 2023
7dc6b82
Merge remote-tracking branch 'origin/update-v4-core' into revert-quoter
ConjunctiveNormalForm Dec 14, 2023
588ffde
update ticks counter
ConjunctiveNormalForm Dec 15, 2023
f6a5516
update Quoter test
ConjunctiveNormalForm Dec 15, 2023
9204cea
typo
ConjunctiveNormalForm Dec 18, 2023
678919f
typo
ConjunctiveNormalForm Dec 18, 2023
b7f737f
simplify handleRevertSingle
ConjunctiveNormalForm Dec 18, 2023
67772de
merge QuoteInput/OutputSingle structs
ConjunctiveNormalForm Dec 18, 2023
fbb6d1b
combine IQuoter structs
ConjunctiveNormalForm Dec 18, 2023
ad3a966
using ... ordering
ConjunctiveNormalForm Dec 18, 2023
b098593
Merge branch 'main' into revert-quoter
ConjunctiveNormalForm Dec 19, 2023
6a7882a
update snapshots
ConjunctiveNormalForm Dec 19, 2023
6a2b71f
move amountOutCached into inner call
ConjunctiveNormalForm Dec 19, 2023
88cbff3
using PathKeyLib for PathKey
ConjunctiveNormalForm Dec 19, 2023
c43f0f1
fix amountOutCached
ConjunctiveNormalForm Dec 19, 2023
f00e616
remove console2 import
ConjunctiveNormalForm Dec 20, 2023
753d11a
resurface revert reason
ConjunctiveNormalForm Dec 20, 2023
386a957
clean up validateRevert
ConjunctiveNormalForm Dec 20, 2023
91c018e
update natsppec
ConjunctiveNormalForm Dec 20, 2023
a657d5c
remove unused
ConjunctiveNormalForm Dec 20, 2023
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
22 changes: 12 additions & 10 deletions contracts/lens/Quoter.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity ^0.8.20;

import "forge-std/console2.sol";
ConjunctiveNormalForm marked this conversation as resolved.
Show resolved Hide resolved
import {Hooks} from "@uniswap/v4-core/src/libraries/Hooks.sol";
import {TickMath} from "@uniswap/v4-core/src/libraries/TickMath.sol";
import {IHooks} from "@uniswap/v4-core/src/interfaces/IHooks.sol";
Expand All @@ -20,7 +21,7 @@ contract Quoter is IQuoter, ILockCallback {
using PathKeyLib for PathKey;

/// @dev cache used to check a safety condition in exact output swaps.
uint256 private amountOutCached;
uint128 private amountOutCached;

// v4 Singleton contract
IPoolManager public immutable manager;
Expand Down Expand Up @@ -239,22 +240,23 @@ contract Quoter is IQuoter, ILockCallback {
uint32[] memory initializedTicksLoadedList = new uint32[](pathLength);
Currency prevCurrencyIn;
uint128 prevAmountIn;
uint128 curAmountOut;

for (uint256 i = pathLength; i > 0; i--) {
curAmountOut = i == pathLength ? params.exactAmount : prevAmountIn;
amountOutCached = curAmountOut;

(PoolKey memory poolKey, bool oneForZero) = PathKeyLib.getPoolAndSwapDirection(
params.path[i - 1], i == pathLength ? params.exactCurrency : prevCurrencyIn
);

(, int24 tickBefore,) = manager.getSlot0(poolKey.toId());

(BalanceDelta curDeltas, uint160 sqrtPriceX96After, int24 tickAfter) = _swap(
poolKey,
!oneForZero,
-int256(int128(i == pathLength ? params.exactAmount : prevAmountIn)),
0,
params.path[i - 1].hookData
);
(BalanceDelta curDeltas, uint160 sqrtPriceX96After, int24 tickAfter) =
_swap(poolKey, !oneForZero, -int256(uint256(curAmountOut)), 0, params.path[i - 1].hookData);

// always clear because sqrtPriceLimitX96 is set to 0 always
delete amountOutCached;
(int128 deltaIn, int128 deltaOut) =
!oneForZero ? (curDeltas.amount0(), curDeltas.amount1()) : (curDeltas.amount1(), curDeltas.amount0());
deltaAmounts[i - 1] += deltaIn;
Expand Down Expand Up @@ -304,7 +306,7 @@ contract Quoter is IQuoter, ILockCallback {
function _swap(
PoolKey memory poolKey,
bool zeroForOne,
int256 amountSpecified,
int256 amountSpecified, // exactInput = amountSpecified > 0
ConjunctiveNormalForm marked this conversation as resolved.
Show resolved Hide resolved
uint160 sqrtPriceLimitX96,
bytes memory hookData
) private returns (BalanceDelta deltas, uint160 sqrtPriceX96After, int24 tickAfter) {
Expand All @@ -318,7 +320,7 @@ contract Quoter is IQuoter, ILockCallback {
hookData
);
// only exactOut case
if (amountOutCached != 0 && amountOutCached != uint256(int256(-deltas.amount1()))) {
if (amountOutCached != 0 && amountOutCached != uint128(zeroForOne ? -deltas.amount1() : -deltas.amount0())) {
revert InsufficientAmountOut();
}
(sqrtPriceX96After, tickAfter,) = manager.getSlot0(poolKey.toId());
Expand Down