@zoralabs/limit-orders 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$js.log +47 -45
- package/CHANGELOG.md +61 -0
- package/abis/IWETH.json +118 -0
- package/abis/IZoraLimitOrderBook.json +5 -0
- package/abis/LimitOrderLiquidity.json +7 -0
- package/abis/LimitOrderViews.json +62 -0
- package/abis/SwapWithLimitOrders.json +18 -11
- package/abis/ZoraLimitOrderBook.json +28 -0
- package/cache/solidity-files-cache.json +1 -1
- package/dist/index.cjs +29 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/wagmiGenerated.d.ts +37 -9
- package/dist/wagmiGenerated.d.ts.map +1 -1
- package/out/BytesLib.sol/BytesLib.json +1 -1
- package/out/CoinCommon.sol/CoinCommon.json +1 -1
- package/out/CoinConfigurationVersions.sol/CoinConfigurationVersions.json +1 -1
- package/out/CoinConstants.sol/CoinConstants.json +1 -1
- package/out/DopplerMath.sol/DopplerMath.json +1 -1
- package/out/FixedPoint96.sol/FixedPoint96.json +1 -1
- package/out/ISwapRouter.sol/ISwapRouter.json +1 -1
- package/out/IUniswapV3SwapCallback.sol/IUniswapV3SwapCallback.json +1 -1
- package/out/IWETH.sol/IWETH.json +1 -0
- package/out/IZoraHookRegistry.sol/IZoraHookRegistry.json +1 -1
- package/out/IZoraLimitOrderBook.sol/IZoraLimitOrderBook.json +1 -1
- package/out/IZoraLimitOrderBookCoinsInterface.sol/IZoraLimitOrderBookCoinsInterface.json +1 -1
- package/out/IZoraV4CoinHook.sol/IZoraV4CoinHook.json +1 -1
- package/out/LimitOrderBitmap.sol/LimitOrderBitmap.json +1 -1
- package/out/LimitOrderCommon.sol/LimitOrderCommon.json +1 -1
- package/out/LimitOrderCreate.sol/LimitOrderCreate.json +1 -1
- package/out/LimitOrderFill.sol/LimitOrderFill.json +1 -1
- package/out/LimitOrderLiquidity.sol/LimitOrderLiquidity.json +1 -1
- package/out/LimitOrderQueues.sol/LimitOrderQueues.json +1 -1
- package/out/LimitOrderStorage.sol/LimitOrderStorage.json +1 -1
- package/out/LimitOrderTypes.sol/LimitOrderTypes.json +1 -1
- package/out/LimitOrderViews.sol/LimitOrderViews.json +1 -0
- package/out/LimitOrderWithdraw.sol/LimitOrderWithdraw.json +1 -1
- package/out/LiquidityAmounts.sol/LiquidityAmounts.json +1 -1
- package/out/Path.sol/Path.json +1 -1
- package/out/Permit2Payments.sol/Permit2Payments.json +1 -1
- package/out/SimpleAccessManaged.sol/SimpleAccessManaged.json +1 -1
- package/out/SimpleAccessManager.sol/SimpleAccessManager.json +1 -1
- package/out/SqrtPriceMath.sol/SqrtPriceMath.json +1 -1
- package/out/SwapLimitOrders.sol/SwapLimitOrders.json +1 -1
- package/out/SwapWithLimitOrders.sol/SwapWithLimitOrders.json +1 -1
- package/out/UniV4SwapToCurrency.sol/UniV4SwapToCurrency.json +1 -1
- package/out/UnsafeMath.sol/UnsafeMath.json +1 -1
- package/out/V3ToV4SwapLib.sol/V3ToV4SwapLib.json +1 -1
- package/out/ZoraLimitOrderBook.sol/ZoraLimitOrderBook.json +1 -1
- package/out/build-info/{69718f10d1dc37f0.json → 876cc09bc44cc8a7.json} +1 -1
- package/out/uniswap/BitMath.sol/BitMath.json +1 -1
- package/out/uniswap/CustomRevert.sol/CustomRevert.json +1 -1
- package/out/uniswap/FullMath.sol/FullMath.json +1 -1
- package/out/uniswap/SafeCast.sol/SafeCast.json +1 -1
- package/out/uniswap/TickMath.sol/TickMath.json +1 -1
- package/package/wagmiGenerated.ts +28 -7
- package/package.json +1 -1
- package/src/IZoraLimitOrderBook.sol +2 -0
- package/src/ZoraLimitOrderBook.sol +22 -8
- package/src/libs/LimitOrderBitmap.sol +0 -51
- package/src/libs/LimitOrderCommon.sol +48 -30
- package/src/libs/LimitOrderCreate.sol +5 -18
- package/src/libs/LimitOrderFill.sol +32 -161
- package/src/libs/LimitOrderLiquidity.sol +92 -71
- package/src/libs/LimitOrderViews.sol +168 -0
- package/src/libs/LimitOrderWithdraw.sol +13 -4
- package/src/libs/SwapLimitOrders.sol +14 -7
- package/src/router/SwapWithLimitOrders.sol +40 -26
- package/test/LimitOrderBitmap.t.sol +13 -7
- package/test/LimitOrderFill.t.sol +43 -0
- package/test/LimitOrderLibraries.t.sol +18 -10
- package/test/LimitOrderLiquidityPayouts.t.sol +280 -3
- package/test/LimitOrderWithdraw.t.sol +28 -1
- package/test/SwapWithLimitOrders.t.sol +3 -3
- package/test/SwapWithLimitOrdersRouter.t.sol +108 -11
- package/test/unit/LimitOrderBitmapUnit.t.sol +0 -134
- package/test/unit/LimitOrderCreateUnit.t.sol +32 -0
- package/test/unit/SwapLimitOrdersUnit.t.sol +231 -33
- package/test/unit/SwapLimitOrdersValidation.t.sol +20 -34
- package/test/unit/SwapWithLimitOrdersUnit.t.sol +21 -88
- package/test/utils/BaseTest.sol +29 -8
- package/test/utils/MockWETH.sol +39 -0
- package/test/utils/TestableZoraLimitOrderBook.sol +5 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"876cc09bc44cc8a7","source_id_to_path":{"0":"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol","1":"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol","2":"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol","3":"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol","4":"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol","5":"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","6":"node_modules/@openzeppelin/contracts/utils/Context.sol","7":"node_modules/@openzeppelin/contracts/utils/TransientSlot.sol","8":"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol","9":"node_modules/@uniswap/permit2/src/interfaces/IAllowanceTransfer.sol","10":"node_modules/@uniswap/permit2/src/interfaces/IEIP712.sol","11":"node_modules/@uniswap/permit2/src/libraries/SafeCast160.sol","12":"node_modules/@uniswap/v4-core/src/interfaces/IExtsload.sol","13":"node_modules/@uniswap/v4-core/src/interfaces/IExttload.sol","14":"node_modules/@uniswap/v4-core/src/interfaces/IHooks.sol","15":"node_modules/@uniswap/v4-core/src/interfaces/IPoolManager.sol","16":"node_modules/@uniswap/v4-core/src/interfaces/IProtocolFees.sol","17":"node_modules/@uniswap/v4-core/src/interfaces/external/IERC20Minimal.sol","18":"node_modules/@uniswap/v4-core/src/interfaces/external/IERC6909Claims.sol","19":"node_modules/@uniswap/v4-core/src/libraries/BitMath.sol","20":"node_modules/@uniswap/v4-core/src/libraries/CurrencyReserves.sol","21":"node_modules/@uniswap/v4-core/src/libraries/CustomRevert.sol","22":"node_modules/@uniswap/v4-core/src/libraries/FixedPoint128.sol","23":"node_modules/@uniswap/v4-core/src/libraries/FullMath.sol","24":"node_modules/@uniswap/v4-core/src/libraries/LiquidityMath.sol","25":"node_modules/@uniswap/v4-core/src/libraries/Lock.sol","26":"node_modules/@uniswap/v4-core/src/libraries/NonzeroDeltaCount.sol","27":"node_modules/@uniswap/v4-core/src/libraries/Position.sol","28":"node_modules/@uniswap/v4-core/src/libraries/SafeCast.sol","29":"node_modules/@uniswap/v4-core/src/libraries/StateLibrary.sol","30":"node_modules/@uniswap/v4-core/src/libraries/TickBitmap.sol","31":"node_modules/@uniswap/v4-core/src/libraries/TickMath.sol","32":"node_modules/@uniswap/v4-core/src/libraries/TransientStateLibrary.sol","33":"node_modules/@uniswap/v4-core/src/types/BalanceDelta.sol","34":"node_modules/@uniswap/v4-core/src/types/BeforeSwapDelta.sol","35":"node_modules/@uniswap/v4-core/src/types/Currency.sol","36":"node_modules/@uniswap/v4-core/src/types/PoolId.sol","37":"node_modules/@uniswap/v4-core/src/types/PoolKey.sol","38":"node_modules/@uniswap/v4-core/src/types/PoolOperation.sol","39":"node_modules/@uniswap/v4-periphery/src/libraries/PathKey.sol","40":"node_modules/@zoralabs/coins/src/interfaces/ICoin.sol","41":"node_modules/@zoralabs/coins/src/interfaces/IDeployedCoinVersionLookup.sol","42":"node_modules/@zoralabs/coins/src/interfaces/IDopplerErrors.sol","43":"node_modules/@zoralabs/coins/src/interfaces/IERC7572.sol","44":"node_modules/@zoralabs/coins/src/interfaces/IHasRewardsRecipients.sol","45":"node_modules/@zoralabs/coins/src/interfaces/IMsgSender.sol","46":"node_modules/@zoralabs/coins/src/interfaces/ISupportsLimitOrderFill.sol","47":"node_modules/@zoralabs/coins/src/interfaces/ISwapPathRouter.sol","48":"node_modules/@zoralabs/coins/src/interfaces/ISwapRouter.sol","49":"node_modules/@zoralabs/coins/src/interfaces/IUpgradeableV4Hook.sol","50":"node_modules/@zoralabs/coins/src/interfaces/IWETH.sol","51":"node_modules/@zoralabs/coins/src/interfaces/IZoraHookRegistry.sol","52":"node_modules/@zoralabs/coins/src/interfaces/IZoraLimitOrderBookCoinsInterface.sol","53":"node_modules/@zoralabs/coins/src/interfaces/IZoraV4CoinHook.sol","54":"node_modules/@zoralabs/coins/src/libs/CoinCommon.sol","55":"node_modules/@zoralabs/coins/src/libs/CoinConfigurationVersions.sol","56":"node_modules/@zoralabs/coins/src/libs/CoinConstants.sol","57":"node_modules/@zoralabs/coins/src/libs/DopplerMath.sol","58":"node_modules/@zoralabs/coins/src/libs/UniV4SwapToCurrency.sol","59":"node_modules/@zoralabs/coins/src/libs/V3ToV4SwapLib.sol","60":"node_modules/@zoralabs/coins/src/types/LpPosition.sol","61":"node_modules/@zoralabs/coins/src/types/PoolConfiguration.sol","62":"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol","63":"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol","64":"node_modules/@zoralabs/coins/src/utils/uniswap/FixedPoint96.sol","65":"node_modules/@zoralabs/coins/src/utils/uniswap/FullMath.sol","66":"node_modules/@zoralabs/coins/src/utils/uniswap/LiquidityAmounts.sol","67":"node_modules/@zoralabs/coins/src/utils/uniswap/SafeCast.sol","68":"node_modules/@zoralabs/coins/src/utils/uniswap/SqrtPriceMath.sol","69":"node_modules/@zoralabs/coins/src/utils/uniswap/TickMath.sol","70":"node_modules/@zoralabs/coins/src/utils/uniswap/UnsafeMath.sol","71":"node_modules/@zoralabs/shared-contracts/src/interfaces/uniswap/ISwapRouter.sol","72":"node_modules/@zoralabs/shared-contracts/src/interfaces/uniswap/IUniswapV3SwapCallback.sol","73":"node_modules/@zoralabs/shared-contracts/src/libs/UniswapV3/BytesLib.sol","74":"node_modules/@zoralabs/shared-contracts/src/libs/UniswapV3/Path.sol","75":"src/IZoraLimitOrderBook.sol","76":"src/ZoraLimitOrderBook.sol","77":"src/access/SimpleAccessManaged.sol","78":"src/access/SimpleAccessManager.sol","79":"src/libs/LimitOrderBitmap.sol","80":"src/libs/LimitOrderCommon.sol","81":"src/libs/LimitOrderCreate.sol","82":"src/libs/LimitOrderFill.sol","83":"src/libs/LimitOrderLiquidity.sol","84":"src/libs/LimitOrderQueues.sol","85":"src/libs/LimitOrderStorage.sol","86":"src/libs/LimitOrderTypes.sol","87":"src/libs/LimitOrderViews.sol","88":"src/libs/LimitOrderWithdraw.sol","89":"src/libs/Permit2Payments.sol","90":"src/libs/SwapLimitOrders.sol","91":"src/router/SwapWithLimitOrders.sol"},"language":"Solidity"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"414:2420:
|
|
1
|
+
{"abi":[],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"414:2420:62:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x5f80fd","sourceMap":"414:2420:62:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Solady (https://github.com/Vectorized/solady/blob/8200a70e8dc2a77ecb074fc2e99a2a0d36547522/src/utils/LibBit.sol)\",\"details\":\"https://github.com/Uniswap/v4-core/blob/80311e34080fee64b6fc6c916e9a51a437d0e482/src/libraries/BitMath.solThis library provides functionality for computing bit properties of an unsigned integer\",\"kind\":\"dev\",\"methods\":{},\"title\":\"BitMath\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol\":\"BitMath\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol\":{\"keccak256\":\"0x4b5411b3868695776c707738846c79a2dd96bf2fd29e5fe8a47818cd20e1a19d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d9016ed3d9902f455ce8aba6cb4e29d7cb47e5af555de00bb802d7f01566070\",\"dweb:/ipfs/QmeHZHQsXkuCN3i1YAt9WayYTTWWtNz5F8R1EspyEER2JN\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol":"BitMath"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol":{"keccak256":"0x4b5411b3868695776c707738846c79a2dd96bf2fd29e5fe8a47818cd20e1a19d","urls":["bzz-raw://3d9016ed3d9902f455ce8aba6cb4e29d7cb47e5af555de00bb802d7f01566070","dweb:/ipfs/QmeHZHQsXkuCN3i1YAt9WayYTTWWtNz5F8R1EspyEER2JN"],"license":"MIT"}},"version":1},"id":62}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[{"type":"error","name":"WrappedError","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"reason","type":"bytes","internalType":"bytes"},{"name":"details","type":"bytes","internalType":"bytes"}]}],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"622:4550:
|
|
1
|
+
{"abi":[{"type":"error","name":"WrappedError","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"reason","type":"bytes","internalType":"bytes"},{"name":"details","type":"bytes","internalType":"bytes"}]}],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"622:4550:63:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x5f80fd","sourceMap":"622:4550:63:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"details\",\"type\":\"bytes\"}],\"name\":\"WrappedError\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"https://github.com/Uniswap/v4-core/blob/80311e34080fee64b6fc6c916e9a51a437d0e482/src/libraries/CustomRevert.solTo use this library, declare `using CustomRevert for bytes4;` and replace `revert CustomError()` with `CustomError.selector.revertWith()`The functions may tamper with the free memory pointer but it is fine since the call context is exited immediately\",\"errors\":{\"WrappedError(address,bytes4,bytes,bytes)\":[{\"details\":\"ERC-7751 error for wrapping bubbled up reverts\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"Library for reverting with custom errors efficiently\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains functions for reverting with custom errors with different argument types efficiently\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol\":\"CustomRevert\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol\":{\"keccak256\":\"0x5c17fced6eedcacc452d65842bb5904bd26b8a72a7973a2d6fac0167700328d4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07044645057353591b0e9f03e0c6802d225307963b45f443c082bce0738c0c2a\",\"dweb:/ipfs/QmWPo2kbp4jkm6CETwPjpqhdVgeA3EfJAtF1SVZMGbf8xU\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"bytes","name":"reason","type":"bytes"},{"internalType":"bytes","name":"details","type":"bytes"}],"type":"error","name":"WrappedError"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol":"CustomRevert"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol":{"keccak256":"0x5c17fced6eedcacc452d65842bb5904bd26b8a72a7973a2d6fac0167700328d4","urls":["bzz-raw://07044645057353591b0e9f03e0c6802d225307963b45f443c082bce0738c0c2a","dweb:/ipfs/QmWPo2kbp4jkm6CETwPjpqhdVgeA3EfJAtF1SVZMGbf8xU"],"license":"MIT"}},"version":1},"id":63}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"471:5108:
|
|
1
|
+
{"abi":[],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"471:5108:65:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x5f80fd","sourceMap":"471:5108:65:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://github.com/Uniswap/v4-core/blob/80311e34080fee64b6fc6c916e9a51a437d0e482/src/libraries/FullMath.solHandles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Contains 512-bit math functions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/FullMath.sol\":\"FullMath\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/FullMath.sol\":{\"keccak256\":\"0xc6b0d61b8d60acb295d196a72f81e577007e822f63c737ae0fa87d63e228f074\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://643ddf8897f3d2610ce5ac45c0571e86cd2a97542c2599121fa39a06daa95509\",\"dweb:/ipfs/QmZ74RCf31apWy8UukKUrFi98kgSK6sRH68MFMGudPVpqx\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"node_modules/@zoralabs/coins/src/utils/uniswap/FullMath.sol":"FullMath"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@zoralabs/coins/src/utils/uniswap/FullMath.sol":{"keccak256":"0xc6b0d61b8d60acb295d196a72f81e577007e822f63c737ae0fa87d63e228f074","urls":["bzz-raw://643ddf8897f3d2610ce5ac45c0571e86cd2a97542c2599121fa39a06daa95509","dweb:/ipfs/QmZ74RCf31apWy8UukKUrFi98kgSK6sRH68MFMGudPVpqx"],"license":"MIT"}},"version":1},"id":65}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[{"type":"error","name":"SafeCastOverflow","inputs":[]}],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"318:2067:
|
|
1
|
+
{"abi":[{"type":"error","name":"SafeCastOverflow","inputs":[]}],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"318:2067:67:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x5f80fd","sourceMap":"318:2067:67:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SafeCastOverflow\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"https://github.com/Uniswap/v4-core/blob/80311e34080fee64b6fc6c916e9a51a437d0e482/src/libraries/SafeCast.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Safe casting methods\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains methods for safely casting between types\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol\":{\"keccak256\":\"0x5c17fced6eedcacc452d65842bb5904bd26b8a72a7973a2d6fac0167700328d4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07044645057353591b0e9f03e0c6802d225307963b45f443c082bce0738c0c2a\",\"dweb:/ipfs/QmWPo2kbp4jkm6CETwPjpqhdVgeA3EfJAtF1SVZMGbf8xU\"]},\"node_modules/@zoralabs/coins/src/utils/uniswap/SafeCast.sol\":{\"keccak256\":\"0x5ec831c0fbdcb16091d35eee2e49d54eaadf7ce72d971aec9ea30f379cba258a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9440106f4a5ff5d829ed68c82de4f92e171c4e9306e89d28fe75b4ca30b5f298\",\"dweb:/ipfs/QmdLJitnGXNMZxG6XZxhvCMjoNEKzpZVJ2dnzGVXtWUSFf\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"SafeCastOverflow"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"node_modules/@zoralabs/coins/src/utils/uniswap/SafeCast.sol":"SafeCast"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol":{"keccak256":"0x5c17fced6eedcacc452d65842bb5904bd26b8a72a7973a2d6fac0167700328d4","urls":["bzz-raw://07044645057353591b0e9f03e0c6802d225307963b45f443c082bce0738c0c2a","dweb:/ipfs/QmWPo2kbp4jkm6CETwPjpqhdVgeA3EfJAtF1SVZMGbf8xU"],"license":"MIT"},"node_modules/@zoralabs/coins/src/utils/uniswap/SafeCast.sol":{"keccak256":"0x5ec831c0fbdcb16091d35eee2e49d54eaadf7ce72d971aec9ea30f379cba258a","urls":["bzz-raw://9440106f4a5ff5d829ed68c82de4f92e171c4e9306e89d28fe75b4ca30b5f298","dweb:/ipfs/QmdLJitnGXNMZxG6XZxhvCMjoNEKzpZVJ2dnzGVXtWUSFf"],"license":"MIT"}},"version":1},"id":67}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"abi":[{"type":"error","name":"InvalidSqrtPrice","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}]},{"type":"error","name":"InvalidTick","inputs":[{"name":"tick","type":"int24","internalType":"int24"}]}],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"498:12100:
|
|
1
|
+
{"abi":[{"type":"error","name":"InvalidSqrtPrice","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}]},{"type":"error","name":"InvalidTick","inputs":[{"name":"tick","type":"int24","internalType":"int24"}]}],"bytecode":{"object":"0x6080806040523460175760039081601c823930815050f35b5f80fdfe5f80fd","sourceMap":"498:12100:69:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x5f80fd","sourceMap":"498:12100:69:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"InvalidSqrtPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"InvalidTick\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"https://github.com/Uniswap/v4-core/blob/80311e34080fee64b6fc6c916e9a51a437d0e482/src/libraries/TickMath.sol\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"MAX_SQRT_PRICE\":{\"details\":\"The maximum value that can be returned from #getSqrtPriceAtTick. Equivalent to getSqrtPriceAtTick(MAX_TICK)\"},\"MAX_SQRT_PRICE_MINUS_MIN_SQRT_PRICE_MINUS_ONE\":{\"details\":\"A threshold used for optimized bounds check, equals `MAX_SQRT_PRICE - MIN_SQRT_PRICE - 1`\"},\"MAX_TICK\":{\"details\":\"The maximum tick that may be passed to #getSqrtPriceAtTick computed from log base 1.0001 of 2**128If ever MIN_TICK and MAX_TICK are not centered around 0, the absTick logic in getSqrtPriceAtTick cannot be used\"},\"MAX_TICK_SPACING\":{\"details\":\"The maximum tick spacing value drawn from the range of type int16, i.e. max from the range [1, 32767]\"},\"MIN_SQRT_PRICE\":{\"details\":\"The minimum value that can be returned from #getSqrtPriceAtTick. Equivalent to getSqrtPriceAtTick(MIN_TICK)\"},\"MIN_TICK\":{\"details\":\"The minimum tick that may be passed to #getSqrtPriceAtTick computed from log base 1.0001 of 2**-128If ever MIN_TICK and MAX_TICK are not centered around 0, the absTick logic in getSqrtPriceAtTick cannot be used\"},\"MIN_TICK_SPACING\":{\"details\":\"The minimum tick spacing value drawn from the range of type int16 that is greater than 0, i.e. min from the range [1, 32767]\"}},\"title\":\"Math library for computing sqrt prices from ticks and vice versa\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidSqrtPrice(uint160)\":[{\"notice\":\"Thrown when the price passed to #getTickAtSqrtPrice does not correspond to a price between MIN_TICK and MAX_TICK\"}],\"InvalidTick(int24)\":[{\"notice\":\"Thrown when the tick passed to #getSqrtPriceAtTick is not between MIN_TICK and MAX_TICK\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports prices between 2**-128 and 2**128\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/TickMath.sol\":\"TickMath\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol\":{\"keccak256\":\"0x4b5411b3868695776c707738846c79a2dd96bf2fd29e5fe8a47818cd20e1a19d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d9016ed3d9902f455ce8aba6cb4e29d7cb47e5af555de00bb802d7f01566070\",\"dweb:/ipfs/QmeHZHQsXkuCN3i1YAt9WayYTTWWtNz5F8R1EspyEER2JN\"]},\"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol\":{\"keccak256\":\"0x5c17fced6eedcacc452d65842bb5904bd26b8a72a7973a2d6fac0167700328d4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07044645057353591b0e9f03e0c6802d225307963b45f443c082bce0738c0c2a\",\"dweb:/ipfs/QmWPo2kbp4jkm6CETwPjpqhdVgeA3EfJAtF1SVZMGbf8xU\"]},\"node_modules/@zoralabs/coins/src/utils/uniswap/TickMath.sol\":{\"keccak256\":\"0xb8d86efe55d877582bdd2d2580d5c57c0fd955fdfb08116dba033f2e8f429e2e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://997e7fc24b30ff5464a5d3db14ac17eb07bed862bbce553a060f38affd8cb6f7\",\"dweb:/ipfs/QmfQ8bo8zEGT6NEDVRdWJaCWaAXMoH7eH8xz14XA1p4Ex3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"}],"type":"error","name":"InvalidSqrtPrice"},{"inputs":[{"internalType":"int24","name":"tick","type":"int24"}],"type":"error","name":"InvalidTick"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"node_modules/@zoralabs/coins/src/utils/uniswap/TickMath.sol":"TickMath"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol":{"keccak256":"0x4b5411b3868695776c707738846c79a2dd96bf2fd29e5fe8a47818cd20e1a19d","urls":["bzz-raw://3d9016ed3d9902f455ce8aba6cb4e29d7cb47e5af555de00bb802d7f01566070","dweb:/ipfs/QmeHZHQsXkuCN3i1YAt9WayYTTWWtNz5F8R1EspyEER2JN"],"license":"MIT"},"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol":{"keccak256":"0x5c17fced6eedcacc452d65842bb5904bd26b8a72a7973a2d6fac0167700328d4","urls":["bzz-raw://07044645057353591b0e9f03e0c6802d225307963b45f443c082bce0738c0c2a","dweb:/ipfs/QmWPo2kbp4jkm6CETwPjpqhdVgeA3EfJAtF1SVZMGbf8xU"],"license":"MIT"},"node_modules/@zoralabs/coins/src/utils/uniswap/TickMath.sol":{"keccak256":"0xb8d86efe55d877582bdd2d2580d5c57c0fd955fdfb08116dba033f2e8f429e2e","urls":["bzz-raw://997e7fc24b30ff5464a5d3db14ac17eb07bed862bbce553a060f38affd8cb6f7","dweb:/ipfs/QmfQ8bo8zEGT6NEDVRdWJaCWaAXMoH7eH8xz14XA1p4Ex3"],"license":"MIT"}},"version":1},"id":69}
|
|
@@ -238,12 +238,6 @@ export const swapWithLimitOrdersABI = [
|
|
|
238
238
|
],
|
|
239
239
|
indexed: false,
|
|
240
240
|
},
|
|
241
|
-
{
|
|
242
|
-
name: 'delta',
|
|
243
|
-
internalType: 'BalanceDelta',
|
|
244
|
-
type: 'int256',
|
|
245
|
-
indexed: false,
|
|
246
|
-
},
|
|
247
241
|
{
|
|
248
242
|
name: 'tickBeforeSwap',
|
|
249
243
|
internalType: 'int24',
|
|
@@ -256,6 +250,24 @@ export const swapWithLimitOrdersABI = [
|
|
|
256
250
|
type: 'int24',
|
|
257
251
|
indexed: false,
|
|
258
252
|
},
|
|
253
|
+
{
|
|
254
|
+
name: 'amount0',
|
|
255
|
+
internalType: 'int128',
|
|
256
|
+
type: 'int128',
|
|
257
|
+
indexed: false,
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
name: 'amount1',
|
|
261
|
+
internalType: 'int128',
|
|
262
|
+
type: 'int128',
|
|
263
|
+
indexed: false,
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'sqrtPriceX96',
|
|
267
|
+
internalType: 'uint160',
|
|
268
|
+
type: 'uint160',
|
|
269
|
+
indexed: false,
|
|
270
|
+
},
|
|
259
271
|
{
|
|
260
272
|
name: 'orders',
|
|
261
273
|
internalType: 'struct SwapWithLimitOrders.CreatedOrder[]',
|
|
@@ -271,7 +283,6 @@ export const swapWithLimitOrdersABI = [
|
|
|
271
283
|
name: 'SwapWithLimitOrdersExecuted',
|
|
272
284
|
},
|
|
273
285
|
{ type: 'error', inputs: [], name: 'EmptyV4Route' },
|
|
274
|
-
{ type: 'error', inputs: [], name: 'FromAddressIsNotOwner' },
|
|
275
286
|
{
|
|
276
287
|
type: 'error',
|
|
277
288
|
inputs: [
|
|
@@ -315,6 +326,7 @@ export const zoraLimitOrderBookABI = [
|
|
|
315
326
|
},
|
|
316
327
|
{ name: 'zoraHookRegistry_', internalType: 'address', type: 'address' },
|
|
317
328
|
{ name: 'authority_', internalType: 'address', type: 'address' },
|
|
329
|
+
{ name: 'weth_', internalType: 'address', type: 'address' },
|
|
318
330
|
],
|
|
319
331
|
stateMutability: 'nonpayable',
|
|
320
332
|
},
|
|
@@ -460,6 +472,13 @@ export const zoraLimitOrderBookABI = [
|
|
|
460
472
|
outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
|
|
461
473
|
stateMutability: 'nonpayable',
|
|
462
474
|
},
|
|
475
|
+
{
|
|
476
|
+
type: 'function',
|
|
477
|
+
inputs: [],
|
|
478
|
+
name: 'weth',
|
|
479
|
+
outputs: [{ name: '', internalType: 'address', type: 'address' }],
|
|
480
|
+
stateMutability: 'view',
|
|
481
|
+
},
|
|
463
482
|
{
|
|
464
483
|
type: 'function',
|
|
465
484
|
inputs: [
|
|
@@ -727,11 +746,13 @@ export const zoraLimitOrderBookABI = [
|
|
|
727
746
|
{ type: 'error', inputs: [], name: 'NotPoolManager' },
|
|
728
747
|
{ type: 'error', inputs: [], name: 'OnlyZoraHook' },
|
|
729
748
|
{ type: 'error', inputs: [], name: 'OrderClosed' },
|
|
749
|
+
{ type: 'error', inputs: [], name: 'OrderFillable' },
|
|
730
750
|
{ type: 'error', inputs: [], name: 'OrderNotMaker' },
|
|
731
751
|
{ type: 'error', inputs: [], name: 'PathMustHaveAtLeastOneStep' },
|
|
732
752
|
{ type: 'error', inputs: [], name: 'RouterMsgSenderInvalid' },
|
|
733
753
|
{ type: 'error', inputs: [], name: 'UnknownCallback' },
|
|
734
754
|
{ type: 'error', inputs: [], name: 'UnlockedFillNotAllowed' },
|
|
755
|
+
{ type: 'error', inputs: [], name: 'WethTransferFailed' },
|
|
735
756
|
{ type: 'error', inputs: [], name: 'ZeroMaker' },
|
|
736
757
|
{ type: 'error', inputs: [], name: 'ZeroOrderSize' },
|
|
737
758
|
{ type: 'error', inputs: [], name: 'ZeroRealizedOrder' },
|
package/package.json
CHANGED
|
@@ -124,6 +124,8 @@ interface IZoraLimitOrderBook is IZoraLimitOrderBookCoinsInterface {
|
|
|
124
124
|
error OrderNotMaker();
|
|
125
125
|
/// @notice Order is no longer open.
|
|
126
126
|
error OrderClosed();
|
|
127
|
+
/// @notice Order is fillable and must be filled, not withdrawn.
|
|
128
|
+
error OrderFillable();
|
|
127
129
|
/// @notice Callback realized zero fills when one was expected.
|
|
128
130
|
error ZeroRealizedOrder();
|
|
129
131
|
/// @notice Unlock callback id was not recognized.
|
|
@@ -19,17 +19,29 @@ import {LimitOrderStorage} from "./libs/LimitOrderStorage.sol";
|
|
|
19
19
|
import {LimitOrderCreate} from "./libs/LimitOrderCreate.sol";
|
|
20
20
|
import {LimitOrderFill} from "./libs/LimitOrderFill.sol";
|
|
21
21
|
import {LimitOrderWithdraw} from "./libs/LimitOrderWithdraw.sol";
|
|
22
|
+
import {LimitOrderViews} from "./libs/LimitOrderViews.sol";
|
|
22
23
|
import {LimitOrderTypes} from "./libs/LimitOrderTypes.sol";
|
|
23
24
|
|
|
24
25
|
contract ZoraLimitOrderBook is IZoraLimitOrderBook, SimpleAccessManaged {
|
|
25
26
|
IPoolManager public immutable poolManager;
|
|
26
27
|
IDeployedCoinVersionLookup public immutable zoraCoinVersionLookup;
|
|
27
28
|
IZoraHookRegistry public immutable zoraHookRegistry;
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
address public immutable weth;
|
|
30
|
+
|
|
31
|
+
constructor(
|
|
32
|
+
address poolManager_,
|
|
33
|
+
address zoraCoinVersionLookup_,
|
|
34
|
+
address zoraHookRegistry_,
|
|
35
|
+
address authority_,
|
|
36
|
+
address weth_
|
|
37
|
+
) SimpleAccessManaged(authority_) {
|
|
30
38
|
poolManager = IPoolManager(poolManager_);
|
|
31
39
|
zoraCoinVersionLookup = IDeployedCoinVersionLookup(zoraCoinVersionLookup_);
|
|
32
40
|
zoraHookRegistry = IZoraHookRegistry(zoraHookRegistry_);
|
|
41
|
+
if (weth_ == address(0)) {
|
|
42
|
+
revert AddressZero();
|
|
43
|
+
}
|
|
44
|
+
weth = weth_;
|
|
33
45
|
}
|
|
34
46
|
|
|
35
47
|
function tickQueueBalance(bytes32 poolKeyHash, address coin, int24 tick) internal view returns (uint256) {
|
|
@@ -62,7 +74,7 @@ contract ZoraLimitOrderBook is IZoraLimitOrderBook, SimpleAccessManaged {
|
|
|
62
74
|
}
|
|
63
75
|
|
|
64
76
|
function getOrderId(bytes32 poolKeyHash, address coin, int24 tick, address maker, uint256 nonce) internal pure returns (bytes32) {
|
|
65
|
-
return keccak256(abi.
|
|
77
|
+
return keccak256(abi.encode(poolKeyHash, coin, tick, maker, nonce));
|
|
66
78
|
}
|
|
67
79
|
|
|
68
80
|
/// @inheritdoc IZoraLimitOrderBook
|
|
@@ -79,8 +91,9 @@ contract ZoraLimitOrderBook is IZoraLimitOrderBook, SimpleAccessManaged {
|
|
|
79
91
|
|
|
80
92
|
/// @inheritdoc IZoraLimitOrderBook
|
|
81
93
|
function fill(PoolKey calldata key, bool isCurrency0, int24 startTick, int24 endTick, uint256 maxFillCount, address fillReferral) external override {
|
|
82
|
-
|
|
83
|
-
|
|
94
|
+
uint256 defaultMaxFillCount = getMaxFillCount();
|
|
95
|
+
if (maxFillCount == 0 || maxFillCount > defaultMaxFillCount) {
|
|
96
|
+
maxFillCount = defaultMaxFillCount;
|
|
84
97
|
}
|
|
85
98
|
|
|
86
99
|
bool isUnlocked = TransientStateLibrary.isUnlocked(poolManager);
|
|
@@ -93,9 +106,9 @@ contract ZoraLimitOrderBook is IZoraLimitOrderBook, SimpleAccessManaged {
|
|
|
93
106
|
LimitOrderStorage.Layout storage state = LimitOrderStorage.layout();
|
|
94
107
|
LimitOrderFill.Context memory ctx = _fillContext();
|
|
95
108
|
|
|
96
|
-
(PoolKey memory canonicalKey, int24 resolvedStart, int24 resolvedEnd) =
|
|
109
|
+
(PoolKey memory canonicalKey, int24 resolvedStart, int24 resolvedEnd) = LimitOrderViews.validateTickRange(
|
|
97
110
|
state,
|
|
98
|
-
ctx,
|
|
111
|
+
ctx.poolManager,
|
|
99
112
|
key,
|
|
100
113
|
isCurrency0,
|
|
101
114
|
startTick,
|
|
@@ -159,7 +172,7 @@ contract ZoraLimitOrderBook is IZoraLimitOrderBook, SimpleAccessManaged {
|
|
|
159
172
|
if (callbackId == CallbackId.FILL) {
|
|
160
173
|
LimitOrderFill.handleFillCallback(state, _fillContext(), callbackData);
|
|
161
174
|
} else if (callbackId == CallbackId.WITHDRAW_ORDERS) {
|
|
162
|
-
LimitOrderWithdraw.handleWithdrawOrdersCallback(state, poolManager, callbackData);
|
|
175
|
+
LimitOrderWithdraw.handleWithdrawOrdersCallback(state, poolManager, weth, callbackData);
|
|
163
176
|
} else {
|
|
164
177
|
revert UnknownCallback();
|
|
165
178
|
}
|
|
@@ -184,6 +197,7 @@ contract ZoraLimitOrderBook is IZoraLimitOrderBook, SimpleAccessManaged {
|
|
|
184
197
|
function _fillContext() private view returns (LimitOrderFill.Context memory ctx) {
|
|
185
198
|
ctx.poolManager = poolManager;
|
|
186
199
|
ctx.versionLookup = zoraCoinVersionLookup;
|
|
200
|
+
ctx.weth = weth;
|
|
187
201
|
}
|
|
188
202
|
|
|
189
203
|
function _fillData(
|
|
@@ -27,57 +27,6 @@ library LimitOrderBitmap {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
function getExecutableTicks(
|
|
31
|
-
mapping(int16 => uint256) storage bm,
|
|
32
|
-
mapping(int24 => LimitOrderTypes.Queue) storage poolQueue,
|
|
33
|
-
int24 tickSpacing,
|
|
34
|
-
bool zeroForOne,
|
|
35
|
-
int24 tickBeforeSwap,
|
|
36
|
-
int24 tickAfterSwap
|
|
37
|
-
) internal view returns (int24[] memory) {
|
|
38
|
-
uint256 numTicksCrossed = uint256(int256(_abs(tickBeforeSwap - tickAfterSwap)));
|
|
39
|
-
uint256 numTicksToCheck = numTicksCrossed / uint256(int256(tickSpacing)) + 1;
|
|
40
|
-
|
|
41
|
-
int24[] memory ticksToCheck = new int24[](numTicksToCheck);
|
|
42
|
-
uint256 numExecutableTicks;
|
|
43
|
-
|
|
44
|
-
int24 targetTick = tickAfterSwap;
|
|
45
|
-
int24 currentTick = tickBeforeSwap;
|
|
46
|
-
|
|
47
|
-
while (true) {
|
|
48
|
-
if (zeroForOne ? currentTick <= targetTick : currentTick >= targetTick) {
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
(int24 nextInitializedTick, bool initialized) = TickBitmap.nextInitializedTickWithinOneWord(bm, currentTick, tickSpacing, zeroForOne);
|
|
53
|
-
|
|
54
|
-
bool crossesTarget = zeroForOne ? nextInitializedTick <= targetTick : nextInitializedTick > targetTick;
|
|
55
|
-
|
|
56
|
-
if (crossesTarget) {
|
|
57
|
-
nextInitializedTick = targetTick;
|
|
58
|
-
initialized = false;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (initialized) {
|
|
62
|
-
if (poolQueue[nextInitializedTick].length > 0) {
|
|
63
|
-
ticksToCheck[numExecutableTicks++] = nextInitializedTick;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (nextInitializedTick == targetTick) {
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
currentTick = zeroForOne ? nextInitializedTick - 1 : nextInitializedTick;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
assembly {
|
|
75
|
-
mstore(ticksToCheck, numExecutableTicks)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return ticksToCheck;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
30
|
function _abs(int24 x) private pure returns (int24) {
|
|
82
31
|
return x < 0 ? -x : x;
|
|
83
32
|
}
|
|
@@ -15,12 +15,13 @@ import {LimitOrderStorage} from "./LimitOrderStorage.sol";
|
|
|
15
15
|
import {LimitOrderTypes} from "./LimitOrderTypes.sol";
|
|
16
16
|
import {LimitOrderQueues} from "./LimitOrderQueues.sol";
|
|
17
17
|
import {LimitOrderBitmap} from "./LimitOrderBitmap.sol";
|
|
18
|
+
import {LimitOrderCreate} from "./LimitOrderCreate.sol";
|
|
18
19
|
|
|
19
20
|
library LimitOrderCommon {
|
|
20
|
-
/// @dev Currency0 orders are executed when the price rises to the
|
|
21
|
-
/// Currency1 orders are executed when the price falls to the
|
|
21
|
+
/// @dev Currency0 orders are executed when the price rises to the upper tick.
|
|
22
|
+
/// Currency1 orders are executed when the price falls to the lower tick.
|
|
22
23
|
function getOrderTick(LimitOrderTypes.LimitOrder storage order) internal view returns (int24) {
|
|
23
|
-
return order.isCurrency0 ? order.
|
|
24
|
+
return order.isCurrency0 ? order.tickUpper : order.tickLower;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
function getOrderCoin(PoolKey memory key, bool isCurrency0) internal pure returns (address) {
|
|
@@ -29,42 +30,59 @@ library LimitOrderCommon {
|
|
|
29
30
|
|
|
30
31
|
function recordCreation(
|
|
31
32
|
LimitOrderStorage.Layout storage state,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
bytes32 orderId,
|
|
35
|
-
address maker,
|
|
36
|
-
address coin,
|
|
37
|
-
bool isCurrency0,
|
|
33
|
+
LimitOrderCreate.CreateContext memory ctx,
|
|
34
|
+
LimitOrderCreate.MintParams memory mintParams,
|
|
38
35
|
int24 orderTick,
|
|
39
|
-
|
|
40
|
-
uint256 epoch,
|
|
41
|
-
uint128 liquidity,
|
|
42
|
-
uint128 realizedSize,
|
|
43
|
-
int24 tickLower,
|
|
44
|
-
int24 tickUpper
|
|
36
|
+
uint128 realizedSize
|
|
45
37
|
) internal {
|
|
46
|
-
|
|
38
|
+
_initializeOrder(state.limitOrders[mintParams.orderId], ctx, mintParams, realizedSize);
|
|
39
|
+
_addToQueue(state, ctx, mintParams, orderTick, realizedSize);
|
|
40
|
+
_updateMakerBalanceAndEmit(state, ctx, mintParams.orderId, orderTick, realizedSize);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function _initializeOrder(
|
|
44
|
+
LimitOrderTypes.LimitOrder storage order,
|
|
45
|
+
LimitOrderCreate.CreateContext memory ctx,
|
|
46
|
+
LimitOrderCreate.MintParams memory mintParams,
|
|
47
|
+
uint128 realizedSize
|
|
48
|
+
) private {
|
|
47
49
|
order.orderSize = realizedSize;
|
|
48
|
-
order.liquidity = liquidity;
|
|
49
|
-
order.tickLower = tickLower;
|
|
50
|
-
order.tickUpper = tickUpper;
|
|
51
|
-
order.createdEpoch = uint32(epoch);
|
|
50
|
+
order.liquidity = mintParams.liquidity;
|
|
51
|
+
order.tickLower = mintParams.tickLower;
|
|
52
|
+
order.tickUpper = mintParams.tickUpper;
|
|
53
|
+
order.createdEpoch = uint32(ctx.epoch);
|
|
52
54
|
order.status = LimitOrderTypes.OrderStatus.OPEN;
|
|
53
|
-
order.isCurrency0 = isCurrency0;
|
|
54
|
-
order.maker = maker;
|
|
55
|
-
order.poolKeyHash = poolKeyHash;
|
|
55
|
+
order.isCurrency0 = ctx.isCurrency0;
|
|
56
|
+
order.maker = ctx.maker;
|
|
57
|
+
order.poolKeyHash = ctx.poolKeyHash;
|
|
58
|
+
}
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
function _addToQueue(
|
|
61
|
+
LimitOrderStorage.Layout storage state,
|
|
62
|
+
LimitOrderCreate.CreateContext memory ctx,
|
|
63
|
+
LimitOrderCreate.MintParams memory mintParams,
|
|
64
|
+
int24 orderTick,
|
|
65
|
+
uint128 realizedSize
|
|
66
|
+
) private {
|
|
67
|
+
LimitOrderTypes.Queue storage tickQueue = state.tickQueues[ctx.poolKeyHash][ctx.coin][orderTick];
|
|
58
68
|
tickQueue.balance += realizedSize;
|
|
59
69
|
|
|
60
|
-
LimitOrderBitmap.setIfFirst(state.tickBitmaps[poolKeyHash][coin], orderTick, key.tickSpacing, tickQueue.length);
|
|
61
|
-
LimitOrderQueues.enqueue(tickQueue, state.limitOrders, orderId);
|
|
70
|
+
LimitOrderBitmap.setIfFirst(state.tickBitmaps[ctx.poolKeyHash][ctx.coin], orderTick, mintParams.key.tickSpacing, tickQueue.length);
|
|
71
|
+
LimitOrderQueues.enqueue(tickQueue, state.limitOrders, mintParams.orderId);
|
|
72
|
+
}
|
|
62
73
|
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
function _updateMakerBalanceAndEmit(
|
|
75
|
+
LimitOrderStorage.Layout storage state,
|
|
76
|
+
LimitOrderCreate.CreateContext memory ctx,
|
|
77
|
+
bytes32 orderId,
|
|
78
|
+
int24 orderTick,
|
|
79
|
+
uint128 realizedSize
|
|
80
|
+
) private {
|
|
81
|
+
uint256 newMakerBalance = state.makerBalances[ctx.maker][ctx.coin] + realizedSize;
|
|
82
|
+
state.makerBalances[ctx.maker][ctx.coin] = newMakerBalance;
|
|
65
83
|
|
|
66
|
-
emit IZoraLimitOrderBook.LimitOrderCreated(maker, coin, poolKeyHash, isCurrency0, orderTick, currentTick, realizedSize, orderId);
|
|
67
|
-
emit IZoraLimitOrderBook.MakerBalanceUpdated(maker, coin, newMakerBalance);
|
|
84
|
+
emit IZoraLimitOrderBook.LimitOrderCreated(ctx.maker, ctx.coin, ctx.poolKeyHash, ctx.isCurrency0, orderTick, ctx.currentTick, realizedSize, orderId);
|
|
85
|
+
emit IZoraLimitOrderBook.MakerBalanceUpdated(ctx.maker, ctx.coin, newMakerBalance);
|
|
68
86
|
}
|
|
69
87
|
|
|
70
88
|
function removeOrder(
|
|
@@ -17,6 +17,7 @@ import {LimitOrderStorage} from "./LimitOrderStorage.sol";
|
|
|
17
17
|
import {IZoraLimitOrderBook} from "../IZoraLimitOrderBook.sol";
|
|
18
18
|
import {LimitOrderLiquidity} from "./LimitOrderLiquidity.sol";
|
|
19
19
|
import {LimitOrderCommon} from "./LimitOrderCommon.sol";
|
|
20
|
+
import {LimitOrderViews} from "./LimitOrderViews.sol";
|
|
20
21
|
import {CoinCommon} from "@zoralabs/coins/src/libs/CoinCommon.sol";
|
|
21
22
|
import {TransientStateLibrary} from "@uniswap/v4-core/src/libraries/TransientStateLibrary.sol";
|
|
22
23
|
import {StateLibrary} from "@uniswap/v4-core/src/libraries/StateLibrary.sol";
|
|
@@ -71,7 +72,6 @@ library LimitOrderCreate {
|
|
|
71
72
|
|
|
72
73
|
function handleCreateCallback(LimitOrderStorage.Layout storage state, IPoolManager poolManager, bytes memory payload) internal returns (bytes memory) {
|
|
73
74
|
IZoraLimitOrderBook.CreateCallbackData memory data = abi.decode(payload, (IZoraLimitOrderBook.CreateCallbackData));
|
|
74
|
-
_validateOrderInputs(data.orderSizes, data.orderTicks, data.maker);
|
|
75
75
|
|
|
76
76
|
bytes32[] memory orderIds = _create(state, poolManager, data);
|
|
77
77
|
|
|
@@ -159,8 +159,10 @@ library LimitOrderCreate {
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
(int24 tickLower, int24 tickUpper) = _calculateTickRange(ctx.isCurrency0, orderTick, key.tickSpacing);
|
|
162
|
+
// Record the tick where the order becomes fillable
|
|
163
|
+
orderTick = ctx.isCurrency0 ? tickUpper : tickLower;
|
|
162
164
|
|
|
163
|
-
uint128 liquidity =
|
|
165
|
+
uint128 liquidity = LimitOrderViews.liquidityForOrder(ctx.isCurrency0, orderSize, tickLower, tickUpper);
|
|
164
166
|
require(liquidity != 0, IZoraLimitOrderBook.ZeroRealizedOrder());
|
|
165
167
|
|
|
166
168
|
orderId = _generateOrderId(ctx.poolKeyHash, ctx.coin, orderTick, ctx.maker, ++state.makerNonces[ctx.maker]);
|
|
@@ -212,22 +214,7 @@ library LimitOrderCreate {
|
|
|
212
214
|
LimitOrderLiquidity.refundResidual(mintParams.key, ctx.isCurrency0, ctx.maker, refunded);
|
|
213
215
|
}
|
|
214
216
|
|
|
215
|
-
LimitOrderCommon.recordCreation(
|
|
216
|
-
state,
|
|
217
|
-
mintParams.key,
|
|
218
|
-
ctx.poolKeyHash,
|
|
219
|
-
mintParams.orderId,
|
|
220
|
-
ctx.maker,
|
|
221
|
-
ctx.coin,
|
|
222
|
-
ctx.isCurrency0,
|
|
223
|
-
orderTick,
|
|
224
|
-
ctx.currentTick,
|
|
225
|
-
ctx.epoch,
|
|
226
|
-
mintParams.liquidity,
|
|
227
|
-
realized,
|
|
228
|
-
mintParams.tickLower,
|
|
229
|
-
mintParams.tickUpper
|
|
230
|
-
);
|
|
217
|
+
LimitOrderCommon.recordCreation(state, ctx, mintParams, orderTick, realized);
|
|
231
218
|
}
|
|
232
219
|
|
|
233
220
|
function _mintLiquidity(IPoolManager poolManager, bool isCurrency0, MintParams memory params) private returns (uint128 realizedSize, uint128 refunded) {
|