diff --git a/.github/workflows/foundry.yml b/.github/workflows/foundry.yml index db388f7..9907bbb 100644 --- a/.github/workflows/foundry.yml +++ b/.github/workflows/foundry.yml @@ -9,6 +9,7 @@ on: env: FOUNDRY_PROFILE: ci MAINNET_RPC_URL: ${{ secrets.MAINNET_RPC_URL }} + BNB_RPC_URL: ${{ secrets.BNB_RPC_URL }} jobs: check: @@ -41,7 +42,16 @@ jobs: forge build id: build - - name: Run Forge tests + - name: Run Forge tests on Ethereum mainnet run: | forge test -vvv - id: test + env: + CHAIN_ID: 1 + id: testMainnet + + - name: Run Forge tests on BNB mainnet + run: | + forge test -vvv + env: + CHAIN_ID: 56 + id: testBNB diff --git a/contracts/EphemeralPoolPositions.sol b/contracts/EphemeralPoolPositions.sol index d2d23da..da9a7b7 100644 --- a/contracts/EphemeralPoolPositions.sol +++ b/contracts/EphemeralPoolPositions.sol @@ -16,6 +16,11 @@ contract EphemeralPoolPositions is PoolUtils { } } + function getPositionsSlot() internal pure virtual returns (uint256) { + // Storage slot of the `positions` mapping in UniswapV3Pool. + return 7; + } + /// @notice Get liquidity positions in a pool /// @dev Public function to expose the abi for easier decoding using TypeChain /// @param pool The address of the pool for which to fetch the tick bitmap @@ -23,6 +28,7 @@ contract EphemeralPoolPositions is PoolUtils { /// @return slots An array of storage slots and their raw data function getPositions(V3PoolCallee pool, PositionKey[] memory keys) public payable returns (Slot[] memory slots) { unchecked { + uint256 POSITIONS_SLOT = getPositionsSlot(); uint256 length = keys.length; // each position occupies 4 storage slots slots = new Slot[](length << 2); @@ -50,3 +56,12 @@ contract EphemeralPoolPositions is PoolUtils { } } } + +contract EphemeralPCSV3PoolPositions is EphemeralPoolPositions { + constructor(V3PoolCallee pool, PositionKey[] memory keys) payable EphemeralPoolPositions(pool, keys) {} + + function getPositionsSlot() internal pure override returns (uint256) { + // Storage slot of the `positions` mapping in PancakeSwapV3Pool. + return 8; + } +} diff --git a/contracts/EphemeralPoolSlots.sol b/contracts/EphemeralPoolSlots.sol index 365378e..1395b8f 100644 --- a/contracts/EphemeralPoolSlots.sol +++ b/contracts/EphemeralPoolSlots.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import "@pancakeswap/v3-core/contracts/interfaces/IPancakeV3Pool.sol"; import "./PoolUtils.sol"; /// @notice A lens for fetching static state variables in a Uniswap v3 pool without deployment @@ -72,7 +73,89 @@ contract EphemeralPoolSlots is PoolUtils { observation := or(shl(32, and(0xffffffffffffff, tickCumulative)), observation) observation := or(blockTimestamp, observation) } - slots[i + 5] = Slot(i + OBSERVATIONS_SLOT, observation); + // UniswapV3Pool's `observations` struct array starts at slot 8. + slots[i + 5] = Slot(i + 8, observation); + } + } + } +} + +/// @notice A lens for fetching static state variables in a PancakeSwap v3 pool without deployment +/// @author Aperture Finance +/// @dev The return data can be accessed externally by `eth_call` without a `to` address or internally by catching the +/// revert data, and decoded by `abi.decode(data, (Slot[]))` +contract EphemeralPCSV3PoolSlots is PoolUtils { + constructor(V3PoolCallee pool) payable { + Slot[] memory slots = getSlots(pool); + bytes memory returnData = abi.encode(slots); + assembly ("memory-safe") { + revert(add(returnData, 0x20), mload(returnData)) + } + } + + /// @notice Get the static storage slots of a pool + /// @dev Public function to expose the abi for easier decoding using TypeChain + /// @param pool The PancakeSwap v3 pool + /// @return slots An array of storage slots and their raw data + function getSlots(V3PoolCallee pool) public payable returns (Slot[] memory slots) { + unchecked { + uint256 length; + { + ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint32 feeProtocol, + bool unlocked + ) = IPancakeV3Pool(V3PoolCallee.unwrap(pool)).slot0(); + // PancakeV3Pool's slot0() fields actually span two storage slots (slot 0 and 1) as a result of their changing `feeProtocol` from uint8 to uint32. + // The first 5 fields are packed into slot 0, and the last 2 fields (`feeProtocol` and `unlocked`) are packed into slot 1. + // See https://evm.storage/eth/19541394/0x6ca298d2983ab03aa1da7679389d955a4efee15c/slot0#map for a visual representation. + uint256 slot0; + uint256 slot1; + assembly { + slot0 := shl(216, observationCardinalityNext) + slot0 := or(shl(200, observationCardinality), slot0) + slot0 := or(shl(184, observationIndex), slot0) + slot0 := or(shl(160, and(0xffffff, tick)), slot0) + slot0 := or(sqrtPriceX96, slot0) + slot1 := shl(32, unlocked) + slot1 := or(feeProtocol, slot1) + } + length = observationCardinality; + slots = new Slot[](length + 6); + slots[0] = Slot(0, slot0); + slots[1] = Slot(1, slot1); + } + slots[2] = Slot(2, pool.feeGrowthGlobal0X128()); + slots[3] = Slot(3, pool.feeGrowthGlobal1X128()); + { + (uint128 token0, uint128 token1) = pool.protocolFees(); + uint256 slot3; + assembly { + slot3 := or(shl(128, token1), token0) + } + slots[4] = Slot(4, slot3); + } + slots[5] = Slot(5, pool.liquidity()); + for (uint256 i; i < length; ++i) { + ( + uint32 blockTimestamp, + int56 tickCumulative, + uint160 secondsPerLiquidityCumulativeX128, + bool initialized + ) = pool.observations(i); + uint256 observation; + assembly { + observation := shl(248, initialized) + observation := or(shl(88, secondsPerLiquidityCumulativeX128), observation) + observation := or(shl(32, and(0xffffffffffffff, tickCumulative)), observation) + observation := or(blockTimestamp, observation) + } + // PancakeSwapV3Pool's `observations` struct array starts at slot 9. + slots[i + 6] = Slot(i + 9, observation); } } } diff --git a/contracts/EphemeralPoolTickBitmap.sol b/contracts/EphemeralPoolTickBitmap.sol index 742253c..d4130cd 100644 --- a/contracts/EphemeralPoolTickBitmap.sol +++ b/contracts/EphemeralPoolTickBitmap.sol @@ -17,6 +17,11 @@ contract EphemeralPoolTickBitmap is PoolUtils { } } + function getTickBitmapSlot() internal pure virtual returns (uint256) { + // Storage slot of the `tickBitmap` mapping in UniswapV3Pool. + return 6; + } + /// @notice Get the tick bitmap for a pool /// @dev Public function to expose the abi for easier decoding using TypeChain /// @param pool The address of the pool for which to fetch the tick bitmap @@ -25,6 +30,7 @@ contract EphemeralPoolTickBitmap is PoolUtils { // checks that the pool exists int24 tickSpacing = IUniswapV3Pool(V3PoolCallee.unwrap(pool)).tickSpacing(); (int16 wordPosLower, int16 wordPosUpper) = getWordPositions(TickMath.MIN_TICK, TickMath.MAX_TICK, tickSpacing); + uint256 TICKBITMAP_SLOT = getTickBitmapSlot(); unchecked { // cache the bitmap and calculate the number of populated ticks slots = new Slot[](uint16(wordPosUpper - wordPosLower + 1)); @@ -42,3 +48,12 @@ contract EphemeralPoolTickBitmap is PoolUtils { } } } + +contract EphemeralPCSV3PoolTickBitmap is EphemeralPoolTickBitmap { + constructor(V3PoolCallee pool) payable EphemeralPoolTickBitmap(pool) {} + + function getTickBitmapSlot() internal pure override returns (uint256) { + // Storage slot of the `tickBitmap` mapping in PancakeSwapV3Pool. + return 7; + } +} diff --git a/contracts/EphemeralPoolTicks.sol b/contracts/EphemeralPoolTicks.sol index 3fdda83..42ac349 100644 --- a/contracts/EphemeralPoolTicks.sol +++ b/contracts/EphemeralPoolTicks.sol @@ -16,6 +16,11 @@ contract EphemeralPoolTicks is PoolUtils { } } + function getTicksSlot() internal pure virtual returns (uint256) { + // Storage slot of the `ticks` mapping in UniswapV3Pool. + return 5; + } + /// @notice Get all the tick data for the populated ticks from tickLower to tickUpper /// @dev Public function to expose the abi for easier decoding using TypeChain /// @param pool The address of the pool for which to fetch populated tick data @@ -60,6 +65,7 @@ contract EphemeralPoolTicks is PoolUtils { uint256 idx ) internal view returns (uint256) { unchecked { + uint256 TICKS_SLOT = getTicksSlot(); for (uint256 bitPos; bitPos < 256; ++bitPos) { //slither-disable-next-line incorrect-shift if (bitmap & (1 << bitPos) != 0) { @@ -107,3 +113,16 @@ contract EphemeralPoolTicks is PoolUtils { } } } + +contract EphemeralPCSV3PoolTicks is EphemeralPoolTicks { + constructor( + V3PoolCallee pool, + int24 tickLower, + int24 tickUpper + ) payable EphemeralPoolTicks(pool, tickLower, tickUpper) {} + + function getTicksSlot() internal pure override returns (uint256) { + // Storage slot of the `ticks` mapping in PancakeSwapV3Pool. + return 6; + } +} diff --git a/contracts/PoolUtils.sol b/contracts/PoolUtils.sol index f142915..fb1c739 100644 --- a/contracts/PoolUtils.sol +++ b/contracts/PoolUtils.sol @@ -14,18 +14,6 @@ abstract contract PoolUtils { uint256 internal constant Q128 = 1 << 128; - /// @dev Storage slot of the `ticks` mapping - uint256 internal constant TICKS_SLOT = 5; - - /// @dev Storage slot of the `tickBitmap` mapping - uint256 internal constant TICKBITMAP_SLOT = 6; - - /// @dev Storage slot of the `positions` mapping - uint256 internal constant POSITIONS_SLOT = 7; - - /// @dev Storage slot of the `observations` mapping - uint256 internal constant OBSERVATIONS_SLOT = 8; - /// @notice Struct for a storage slot and its raw data struct Slot { uint256 slot; diff --git a/contracts/PositionUtils.sol b/contracts/PositionUtils.sol index f989487..b84805c 100644 --- a/contracts/PositionUtils.sol +++ b/contracts/PositionUtils.sol @@ -1,10 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {INonfungiblePositionManager as INPM} from "@aperture_finance/uni-v3-lib/src/interfaces/INonfungiblePositionManager.sol"; +import {INonfungiblePositionManager as INPM, IPCSV3NonfungiblePositionManager as IPCSV3NPM} from "@aperture_finance/uni-v3-lib/src/interfaces/INonfungiblePositionManager.sol"; import {NPMCaller, PositionFull} from "@aperture_finance/uni-v3-lib/src/NPMCaller.sol"; import {PoolAddress} from "@aperture_finance/uni-v3-lib/src/PoolAddress.sol"; +import {PoolAddressPancakeSwapV3} from "@aperture_finance/uni-v3-lib/src/PoolAddressPancakeSwapV3.sol"; import {IUniswapV3PoolState, V3PoolCallee} from "@aperture_finance/uni-v3-lib/src/PoolCaller.sol"; +import {IUniswapV3Factory} from "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol"; import {ERC20Callee} from "./libraries/ERC20Caller.sol"; import {PoolUtils} from "./PoolUtils.sol"; @@ -14,7 +16,9 @@ struct Slot0 { uint16 observationIndex; uint16 observationCardinality; uint16 observationCardinalityNext; - uint8 feeProtocol; + // `feeProtocol` is of type uint8 in Uniswap V3, and uint32 in PancakeSwap V3. + // We use uint32 here as this can hold both uint8 and uint32. + uint32 feeProtocol; bool unlocked; } @@ -49,7 +53,7 @@ abstract contract PositionUtils is PoolUtils { state.tokenId = tokenId; PositionFull memory position = state.position; V3PoolCallee pool = V3PoolCallee.wrap( - PoolAddress.computeAddressSorted(NPMCaller.factory(npm), position.token0, position.token1, position.fee) + IUniswapV3Factory(NPMCaller.factory(npm)).getPool(position.token0, position.token1, position.fee) ); state.activeLiquidity = pool.liquidity(); slot0InPlace(pool, state.slot0); diff --git a/foundry.toml b/foundry.toml index fe1b922..7a78747 100644 --- a/foundry.toml +++ b/foundry.toml @@ -26,5 +26,6 @@ runs = 16 [rpc_endpoints] mainnet = "${MAINNET_RPC_URL}" +bnb_smart_chain = "${BNB_RPC_URL}" # See more config options https://github.com/foundry-rs/foundry/tree/master/config diff --git a/package.json b/package.json index dffb07c..11e85e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aperture-lens", - "version": "0.6.0", + "version": "1.0.0", "description": "Contains ephemeral lens contracts that can be called without deployment and their interfaces in various Web3 libraries.", "author": "Aperture Finance ", "license": "Apache-2.0", @@ -47,30 +47,32 @@ "typechain": "hardhat typechain" }, "dependencies": { - "@aperture_finance/uni-v3-lib": "^1.2.1", - "@openzeppelin/contracts": "^5.0.1", + "@aperture_finance/uni-v3-lib": "^2.0.1", + "@openzeppelin/contracts": "^5.0.2", "ethers": "5.7.2", - "viem": "^2.7.9" + "viem": "^2.9.6", + "zod":"^3.22.4" }, "devDependencies": { - "@aperture_finance/uniswap-v3-automation-sdk": "^1.13.1", "@ethersproject/abi": "5.7.0", "@ethersproject/providers": "5.7.2", "@nomicfoundation/hardhat-foundry": "^1.1.1", "@nomiclabs/hardhat-ethers": "^2.2.3", + "@pancakeswap/v3-sdk": "^3.8.0", "@typechain/ethers-v5": "^11.1.2", - "@typechain/hardhat": "^7.0.0", - "@types/chai": "^4.3.11", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.3.14", "@types/mocha": "^10.0.6", - "@types/node": "^20.10.6", - "chai": "^4.3.10", - "hardhat": "^2.19.4", - "mocha": "^10.2.0", - "prettier": "^3.1.1", + "@types/node": "^20.11.30", + "@uniswap/v3-sdk": "^3.11.0", + "chai": "^4.4.1", + "hardhat": "^2.22.2", + "mocha": "^10.4.0", + "prettier": "^3.2.5", "prettier-plugin-solidity": "^1.3.1", "ts-node": "^10.9.2", "typechain": "^8.3.2", - "typescript": "^5.3.3" + "typescript": "^5.4.3" }, "prettier": { "plugins": [ diff --git a/remappings.txt b/remappings.txt index cbf48a9..02a549a 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,5 +1,6 @@ @aperture_finance/uni-v3-lib/=node_modules/@aperture_finance/uni-v3-lib/ @openzeppelin/=node_modules/@openzeppelin/ +@pancakeswap/=node_modules/@pancakeswap/ @uniswap/=node_modules/@uniswap/ forge-std/=lib/forge-std/src/ solady/=node_modules/solady/ diff --git a/src/viem/poolLens.ts b/src/viem/poolLens.ts index 8111d45..d0f0a6b 100644 --- a/src/viem/poolLens.ts +++ b/src/viem/poolLens.ts @@ -2,12 +2,23 @@ import { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from "abitype"; import { Address, PublicClient } from "viem"; import { EphemeralGetPopulatedTicksInRange__factory, + EphemeralPCSV3PoolPositions__factory, + EphemeralPCSV3PoolSlots__factory, + EphemeralPCSV3PoolTickBitmap__factory, + EphemeralPCSV3PoolTicks__factory, EphemeralPoolPositions__factory, EphemeralPoolSlots__factory, EphemeralPoolTickBitmap__factory, EphemeralPoolTicks__factory, } from "../../typechain"; import { callEphemeralContract } from "./caller"; +import { z } from 'zod'; + +export const AutomatedMarketMakerEnum = z.enum([ + 'UNISWAP_V3', + 'PANCAKESWAP_V3', +]); +export type AutomatedMarketMakerEnum = z.infer; /** * Fetches the liquidity within the tick range for the specified pool by deploying an ephemeral contract via `eth_call`. @@ -37,19 +48,31 @@ export async function getPopulatedTicksInRange( ); } -export async function getStaticSlots(pool: Address, publicClient: PublicClient, blockNumber?: bigint) { +export async function getStaticSlots( + amm: AutomatedMarketMakerEnum, + pool: Address, + publicClient: PublicClient, + blockNumber?: bigint, +) { return await callEphemeralContract( - { - abi: EphemeralPoolSlots__factory.abi, - bytecode: EphemeralPoolSlots__factory.bytecode, - args: [pool], - }, + amm === AutomatedMarketMakerEnum.enum.PANCAKESWAP_V3 + ? { + abi: EphemeralPCSV3PoolSlots__factory.abi, + bytecode: EphemeralPCSV3PoolSlots__factory.bytecode, + args: [pool], + } + : { + abi: EphemeralPoolSlots__factory.abi, + bytecode: EphemeralPoolSlots__factory.bytecode, + args: [pool], + }, publicClient, blockNumber, ); } export async function getTicksSlots( + amm: AutomatedMarketMakerEnum, pool: Address, tickLower: number, tickUpper: number, @@ -57,23 +80,40 @@ export async function getTicksSlots( blockNumber?: bigint, ) { return await callEphemeralContract( - { - abi: EphemeralPoolTicks__factory.abi, - bytecode: EphemeralPoolTicks__factory.bytecode, - args: [pool, tickLower, tickUpper], - }, + amm === AutomatedMarketMakerEnum.enum.PANCAKESWAP_V3 + ? { + abi: EphemeralPCSV3PoolTicks__factory.abi, + bytecode: EphemeralPCSV3PoolTicks__factory.bytecode, + args: [pool, tickLower, tickUpper], + } + : { + abi: EphemeralPoolTicks__factory.abi, + bytecode: EphemeralPoolTicks__factory.bytecode, + args: [pool, tickLower, tickUpper], + }, publicClient, blockNumber, ); } -export async function getTickBitmapSlots(pool: Address, publicClient: PublicClient, blockNumber?: bigint) { +export async function getTickBitmapSlots( + amm: AutomatedMarketMakerEnum, + pool: Address, + publicClient: PublicClient, + blockNumber?: bigint, +) { return await callEphemeralContract( - { - abi: EphemeralPoolTickBitmap__factory.abi, - bytecode: EphemeralPoolTickBitmap__factory.bytecode, - args: [pool], - }, + amm === AutomatedMarketMakerEnum.enum.PANCAKESWAP_V3 + ? { + abi: EphemeralPCSV3PoolTickBitmap__factory.abi, + bytecode: EphemeralPCSV3PoolTickBitmap__factory.bytecode, + args: [pool], + } + : { + abi: EphemeralPoolTickBitmap__factory.abi, + bytecode: EphemeralPoolTickBitmap__factory.bytecode, + args: [pool], + }, publicClient, blockNumber, ); @@ -85,17 +125,24 @@ export type PositionKey = AbiParametersToPrimitiveTypes< >[1][0]; export async function getPositionsSlots( + amm: AutomatedMarketMakerEnum, pool: Address, keys: PositionKey[], publicClient: PublicClient, blockNumber?: bigint, ) { return await callEphemeralContract( - { - abi: EphemeralPoolPositions__factory.abi, - bytecode: EphemeralPoolPositions__factory.bytecode, - args: [pool, keys], - }, + amm === AutomatedMarketMakerEnum.enum.PANCAKESWAP_V3 + ? { + abi: EphemeralPCSV3PoolPositions__factory.abi, + bytecode: EphemeralPCSV3PoolPositions__factory.bytecode, + args: [pool, keys], + } + : { + abi: EphemeralPoolPositions__factory.abi, + bytecode: EphemeralPoolPositions__factory.bytecode, + args: [pool, keys], + }, publicClient, blockNumber, ); diff --git a/test/foundry/Base.t.sol b/test/foundry/Base.t.sol index 7ff5383..1273ad8 100644 --- a/test/foundry/Base.t.sol +++ b/test/foundry/Base.t.sol @@ -8,6 +8,8 @@ import "@aperture_finance/uni-v3-lib/src/TernaryLib.sol"; import "@aperture_finance/uni-v3-lib/src/TickBitmap.sol"; import "@aperture_finance/uni-v3-lib/src/TickMath.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import "@pancakeswap/v3-core/contracts/interfaces/callback/IPancakeV3MintCallback.sol"; +import "@pancakeswap/v3-core/contracts/interfaces/callback/IPancakeV3SwapCallback.sol"; import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol"; import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol"; import "@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3MintCallback.sol"; @@ -15,7 +17,18 @@ import "@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.so import "forge-std/Test.sol"; import "solady/src/utils/SafeTransferLib.sol"; -abstract contract BaseTest is Test, IUniswapV3MintCallback, IUniswapV3SwapCallback { +enum DEX { + UniswapV3, + PancakeSwapV3 +} + +abstract contract BaseTest is + Test, + IPancakeV3MintCallback, + IPancakeV3SwapCallback, + IUniswapV3MintCallback, + IUniswapV3SwapCallback +{ using SafeTransferLib for address; using TernaryLib for bool; using TickMath for int24; @@ -25,8 +38,10 @@ abstract contract BaseTest is Test, IUniswapV3MintCallback, IUniswapV3SwapCallba uint160 internal constant MIN_SQRT_RATIO_PLUS_ONE = TickMath.MIN_SQRT_RATIO + 1; uint160 internal constant MAX_SQRT_RATIO_MINUS_ONE = 1461446703485210103287273052203988822378723970342 - 1; + DEX internal dex; + // Uniswap v3 position manager - INPM internal constant npm = INPM(0xC36442b4a4522E871399CD717aBDD847Ab11FE88); + INPM internal npm; uint256 internal chainId; address internal WETH; @@ -51,15 +66,15 @@ abstract contract BaseTest is Test, IUniswapV3MintCallback, IUniswapV3SwapCallba if (chainId == 1) { blockNumber = 17000000; USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; - } else if (chainId == 5) { - blockNumber = 9000000; - USDC = 0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C; - } else if (chainId == 10) { - blockNumber = 20000000; - USDC = 0x7F5c764cBc14f9669B88837ca1490cCa17c31607; - } else if (chainId == 42161) { - blockNumber = 70000000; - USDC = 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8; + npm = dex == DEX.PancakeSwapV3 + ? INPM(0x46A15B0b27311cedF172AB29E4f4766fbE7F4364) + : INPM(0xC36442b4a4522E871399CD717aBDD847Ab11FE88); + } else if (chainId == 56) { + blockNumber = 37460000; + USDC = 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d; + npm = dex == DEX.PancakeSwapV3 + ? INPM(0x46A15B0b27311cedF172AB29E4f4766fbE7F4364) + : INPM(0x7b8A01B39D58278b5DE7e48c8449c9f4F5170613); } else { revert("Unsupported chain"); } @@ -132,6 +147,18 @@ abstract contract BaseTest is Test, IUniswapV3MintCallback, IUniswapV3SwapCallba if (amount1Owed > 0) token1.safeTransfer(pool, amount1Owed); } + /// @dev Pay pool to finish swap + function pancakeV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes calldata) external { + if (amount0Delta > 0) token0.safeTransfer(pool, uint256(amount0Delta)); + if (amount1Delta > 0) token1.safeTransfer(pool, uint256(amount1Delta)); + } + + /// @dev Pay pool to finish minting + function pancakeV3MintCallback(uint256 amount0Owed, uint256 amount1Owed, bytes calldata) external { + if (amount0Owed > 0) token0.safeTransfer(pool, amount0Owed); + if (amount1Owed > 0) token1.safeTransfer(pool, amount1Owed); + } + /// @dev Make a direct pool mint function mint( address recipient, diff --git a/test/foundry/PoolLens.t.sol b/test/foundry/PoolLens.t.sol index be49df7..bb5c06a 100644 --- a/test/foundry/PoolLens.t.sol +++ b/test/foundry/PoolLens.t.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import "@pancakeswap/v3-core/contracts/interfaces/IPancakeV3Factory.sol"; import "contracts/EphemeralPoolSlots.sol"; import "contracts/EphemeralPoolTicks.sol"; import "contracts/EphemeralPoolTickBitmap.sol"; @@ -68,3 +69,70 @@ contract PoolLensTest is BaseTest, PoolUtils { } } } + +contract PCSV3PoolLensTest is BaseTest, PoolUtils { + function setUp() public override { + dex = DEX.PancakeSwapV3; + super.setUp(); + } + + function test_GetSlots() public { + try new EphemeralPCSV3PoolSlots(V3PoolCallee.wrap(pool)) {} catch (bytes memory returnData) { + Slot[] memory slots = abi.decode(returnData, (Slot[])); + uint256 length = slots.length; + for (uint256 i; i < length; ++i) { + assertEq(bytes32(slots[i].data), vm.load(pool, bytes32(slots[i].slot))); + } + } + } + + function test_GetPopulatedTicksInRange() public { + int24 tick = currentTick(); + try new EphemeralPCSV3PoolTicks(V3PoolCallee.wrap(pool), tick, tick) {} catch (bytes memory returnData) { + Slot[] memory slots = abi.decode(returnData, (Slot[])); + uint256 length = slots.length; + for (uint256 i; i < length; ++i) { + assertEq(bytes32(slots[i].data), vm.load(pool, bytes32(slots[i].slot))); + } + } + } + + function test_GetTickBitmap() public { + try new EphemeralPCSV3PoolTickBitmap(V3PoolCallee.wrap(pool)) {} catch (bytes memory returnData) { + Slot[] memory slots = abi.decode(returnData, (Slot[])); + uint256 length = slots.length; + for (uint256 i; i < length; ++i) { + assertEq(bytes32(slots[i].data), vm.load(pool, bytes32(slots[i].slot))); + } + } + } + + function test_GetPositions() public { + int24 tick = currentTick(); + testFuzz_GetPositions(tick - tickSpacing, tick + tickSpacing); + } + + /// forge-config: default.fuzz.runs = 16 + /// forge-config: ci.fuzz.runs = 16 + function testFuzz_GetPositions(int24 tickLower, int24 tickUpper) public { + (tickLower, tickUpper) = prepTicks(tickLower, tickUpper); + uint256 amount0Desired = token0Unit; + uint256 amount1Desired = token1Unit; + deal(token0, address(this), type(uint256).max); + deal(token1, address(this), type(uint256).max); + PositionKey[] memory keys = new PositionKey[](3); + for (uint256 i; i < 3; ++i) { + mint(address(this), amount0Desired, amount1Desired, tickLower, tickUpper); + keys[i] = PositionKey(address(this), tickLower, tickUpper); + tickLower -= tickSpacing; + tickUpper += tickSpacing; + } + try new EphemeralPCSV3PoolPositions(V3PoolCallee.wrap(pool), keys) {} catch (bytes memory returnData) { + Slot[] memory slots = abi.decode(returnData, (Slot[])); + uint256 length = slots.length; + for (uint256 i; i < length; ++i) { + assertEq(bytes32(slots[i].data), vm.load(pool, bytes32(slots[i].slot))); + } + } + } +} diff --git a/test/foundry/PositionLens.t.sol b/test/foundry/PositionLens.t.sol index 54c3188..e71b695 100644 --- a/test/foundry/PositionLens.t.sol +++ b/test/foundry/PositionLens.t.sol @@ -1,6 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {IPCSV3NonfungiblePositionManager} from "@aperture_finance/uni-v3-lib/src/interfaces/INonfungiblePositionManager.sol"; +import {PoolAddress} from "@aperture_finance/uni-v3-lib/src/PoolAddress.sol"; +import {PoolAddressPancakeSwapV3} from "@aperture_finance/uni-v3-lib/src/PoolAddressPancakeSwapV3.sol"; +import {IPancakeV3Pool} from "@pancakeswap/v3-core/contracts/interfaces/IPancakeV3Pool.sol"; import "contracts/EphemeralAllPositionsByOwner.sol"; import "contracts/EphemeralGetPosition.sol"; import "contracts/EphemeralGetPositions.sol"; @@ -13,7 +17,7 @@ contract PositionLensTest is BaseTest { int24 internal _tickUpper; uint256 internal lastTokenId; - function setUp() public override { + function setUp() public virtual override { super.setUp(); lastTokenId = npm.totalSupply(); positionLens = new PositionLens(); @@ -96,18 +100,28 @@ contract PositionLensTest is BaseTest { assertEq(liquidity, pos.position.liquidity, "liquidity"); } { - IUniswapV3Pool pool = IUniswapV3Pool( - PoolAddress.computeAddressSorted( - address(factory), - pos.position.token0, - pos.position.token1, - pos.position.fee - ) + address pool = IUniswapV3Factory(factory).getPool( + pos.position.token0, + pos.position.token1, + pos.position.fee ); - (uint160 sqrtPriceX96, int24 tick, , , , , ) = pool.slot0(); + ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint32 feeProtocol, + bool unlocked + ) = IPancakeV3Pool(pool).slot0(); assertEq(sqrtPriceX96, pos.slot0.sqrtPriceX96, "sqrtPriceX96"); assertEq(tick, pos.slot0.tick, "tick"); - assertEq(pool.liquidity(), pos.activeLiquidity, "liquidity"); + assertEq(observationIndex, pos.slot0.observationIndex, "observationIndex"); + assertEq(observationCardinality, pos.slot0.observationCardinality, "observationCardinality"); + assertEq(observationCardinalityNext, pos.slot0.observationCardinalityNext, "observationCardinalityNext"); + assertEq(feeProtocol, pos.slot0.feeProtocol, "feeProtocol"); + assertEq(unlocked, pos.slot0.unlocked, "unlocked"); + assertEq(IUniswapV3Pool(pool).liquidity(), pos.activeLiquidity, "liquidity"); } assertEq(IERC20Metadata(pos.position.token0).decimals(), pos.decimals0, "decimals0"); assertEq(IERC20Metadata(pos.position.token1).decimals(), pos.decimals1, "decimals1"); @@ -115,16 +129,16 @@ contract PositionLensTest is BaseTest { /// forge-config: default.fuzz.runs = 16 /// forge-config: ci.fuzz.runs = 16 - function testFuzz_GetPosition(uint256 tokenId) public { - tokenId = bound(tokenId, 1, 10000); + function testFuzz_GetPosition(uint256 tokenId) public virtual { + tokenId = bound(tokenId, 1, 200); try new EphemeralGetPosition(npm, tokenId) {} catch (bytes memory returnData) { PositionState memory pos = abi.decode(returnData, (PositionState)); verifyPosition(pos); } } - function test_GetPositions() public { - uint256 startTokenId = 10000; + function test_GetPositions() public virtual { + uint256 startTokenId = 100; uint256[] memory tokenIds = new uint256[](10); for (uint256 i; i < 10; ++i) { tokenIds[i] = startTokenId + i; @@ -151,3 +165,17 @@ contract PositionLensTest is BaseTest { } } } + +contract PCSV3PositionLensTest is PositionLensTest { + function setUp() public override { + dex = DEX.PancakeSwapV3; + super.setUp(); + } + + // Trivially override so that the "forge-config" settings are applied. + /// forge-config: default.fuzz.runs = 16 + /// forge-config: ci.fuzz.runs = 16 + function testFuzz_GetPosition(uint256 tokenId) public override { + super.testFuzz_GetPosition(tokenId); + } +} diff --git a/test/foundry/StorageLens.t.sol b/test/foundry/StorageLens.t.sol index fb63d74..9c5d155 100644 --- a/test/foundry/StorageLens.t.sol +++ b/test/foundry/StorageLens.t.sol @@ -1,11 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import "@pancakeswap/v3-core/contracts/interfaces/IPancakeV3Factory.sol"; import "contracts/EphemeralStorageLens.sol"; import "./Base.t.sol"; contract StorageLensTest is BaseTest { - function setUp() public override { + function setUp() public virtual override { super.setUp(); vm.etch(pool, vm.getDeployedCode("EphemeralStorageLens.sol")); } @@ -31,3 +32,10 @@ contract StorageLensTest is BaseTest { assertEq(values[0], vm.load(pool, slot)); } } + +contract PCSV3StorageLensTest is StorageLensTest { + function setUp() public override { + dex = DEX.PancakeSwapV3; + super.setUp(); + } +} diff --git a/test/foundry/TickLens.t.sol b/test/foundry/TickLens.t.sol index e9e4972..e37782b 100644 --- a/test/foundry/TickLens.t.sol +++ b/test/foundry/TickLens.t.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import "@pancakeswap/v3-core/contracts/interfaces/IPancakeV3Factory.sol"; import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol"; import "contracts/EphemeralGetPopulatedTicksInRange.sol"; import "./Base.t.sol"; @@ -41,3 +42,10 @@ contract TickLensTest is BaseTest, PoolUtils { } } } + +contract PCSV3TickLensTest is TickLensTest { + function setUp() public override { + dex = DEX.PancakeSwapV3; + super.setUp(); + } +} diff --git a/test/hardhat/pcsv3_test.ts b/test/hardhat/pcsv3_test.ts new file mode 100644 index 0000000..ad16b30 --- /dev/null +++ b/test/hardhat/pcsv3_test.ts @@ -0,0 +1,187 @@ +import { TickMath } from "@uniswap/v3-sdk"; +import { expect } from "chai"; +import { ContractFunctionReturnType, createPublicClient, getContract, http, toHex } from "viem"; +import { bsc } from "viem/chains"; +import { + AutomatedMarketMakerEnum, + getAllPositionsByOwner, + getPopulatedTicksInRange, + getPositionDetails, + getPositions, + getPositionsSlots, + getStaticSlots, + getStorageAt, + getTickBitmapSlots, + getTicksSlots, +} from "../../src/viem"; +import { + EphemeralGetPositions__factory, + EphemeralPoolSlots__factory, + INonfungiblePositionManager__factory, + IPancakeV3Pool__factory, +} from "../../typechain"; +import { computePoolAddress } from "@pancakeswap/v3-sdk"; +import { Token } from "@pancakeswap/sdk"; + +const AMM = AutomatedMarketMakerEnum.enum.PANCAKESWAP_V3; +const PCSV3_NPM = "0x46A15B0b27311cedF172AB29E4f4766fbE7F4364"; +const PCSV3_POOL_DEPLOYER = "0x41ff9AA7e16B8B1a8a8dc4f0eFacd93D02d071c9"; +const USDT_ADDRESS = "0x55d398326f99059fF775485246999027B3197955"; +const WBNB_ADDRESS = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; + +describe("Pool lens test with PCSV3 on BSC", () => { + const publicClient = createPublicClient({ + chain: bsc, + transport: http(`https://bsc-rpc.publicnode.com`), + batch: { + multicall: true, + }, + }); + var blockNumber: bigint; + const pool = computePoolAddress({ + deployerAddress: PCSV3_POOL_DEPLOYER, + tokenA: new Token(bsc.id, USDT_ADDRESS, 6, "USDT"), + tokenB: new Token(bsc.id, WBNB_ADDRESS, 18, "WBNB"), + fee: 500, + }); + const poolContract = getContract({ + address: pool, + abi: IPancakeV3Pool__factory.abi, + client: publicClient, + }); + const npm = getContract({ + address: PCSV3_NPM, + abi: INonfungiblePositionManager__factory.abi, + client: publicClient, + }); + + before(async () => { + blockNumber = (await publicClient.getBlockNumber()) - 64n; + console.log(`Running PCSV3 tests on the BNB chain at block number ${blockNumber}...`); + }); + + it("Test extsload", async () => { + const slots = await getStorageAt( + pool, + Array.from({ length: 4 }, (_, i) => toHex(i, { size: 32 })), + publicClient, + blockNumber, + ); + await Promise.all( + slots.map(async (slot, i) => { + const _slot = await publicClient.getStorageAt({ address: pool, slot: toHex(i), blockNumber }); + expect(slot).to.be.eq(_slot); + }), + ); + }); + + it("Test getting populated ticks", async () => { + const [, tickCurrent] = await poolContract.read.slot0({ blockNumber }); + const ticks = await getPopulatedTicksInRange(pool, tickCurrent, tickCurrent, publicClient, blockNumber); + await Promise.all( + ticks.map(async ({ tick, liquidityGross, liquidityNet }) => { + const [_liquidityGross, _liquidityNet] = await poolContract.read.ticks([tick], { blockNumber }); + expect(liquidityGross).to.be.eq(_liquidityGross); + expect(liquidityNet).to.be.eq(_liquidityNet); + }), + ); + }); + + it("Test getting position details", async () => { + const { + tokenId, + position: { token0, token1, fee }, + slot0: { sqrtPriceX96, tick }, + } = await getPositionDetails(PCSV3_NPM, 4n, publicClient, blockNumber); + expect(tokenId).to.be.eq(4n); + const poolAddress = computePoolAddress({ + deployerAddress: PCSV3_POOL_DEPLOYER, + tokenA: new Token(bsc.id, token0, 0, "NOT_USED"), + tokenB: new Token(bsc.id, token1, 0, "NOT_USED"), + fee, + }); + const [_sqrtPriceX96, _tick] = await getContract({ + address: poolAddress, + abi: IPancakeV3Pool__factory.abi, + client: publicClient, + }).read.slot0({ blockNumber }); + expect(sqrtPriceX96).to.be.eq(_sqrtPriceX96); + expect(tick).to.be.eq(_tick); + }); + + async function verifyPositionDetails(posArr: ContractFunctionReturnType) { + await Promise.all( + posArr.map(async ({ tokenId, position }) => { + const [, , token0, token1, fee, tickLower, tickUpper, liquidity] = await npm.read.positions([tokenId], { + blockNumber, + }); + expect(position.token0).to.be.eq(token0); + expect(position.token1).to.be.eq(token1); + expect(position.fee).to.be.eq(fee); + expect(position.tickLower).to.be.eq(tickLower); + expect(position.tickUpper).to.be.eq(tickUpper); + expect(position.liquidity).to.be.eq(liquidity); + }), + ); + } + + it("Test getting position array", async () => { + const posArr = await getPositions( + PCSV3_NPM, + Array.from({ length: 100 }, (_, i) => BigInt(i + 1)), + publicClient, + blockNumber, + ); + await verifyPositionDetails(posArr); + }); + + it("Test getting all positions by owner", async () => { + const totalSupply = await npm.read.totalSupply({ blockNumber }); + const owner = await npm.read.ownerOf([totalSupply - 1n], { blockNumber }); + const posArr = await getAllPositionsByOwner(PCSV3_NPM, owner, publicClient, blockNumber); + await verifyPositionDetails(posArr); + }); + + async function verifySlots(slots: ContractFunctionReturnType) { + expect(slots.some(({ data }) => data > 0)).to.be.true; + const address = pool; + const altSlots = await Promise.all( + slots.slice(0, 4).map(({ slot }) => publicClient.getStorageAt({ address, slot: toHex(slot), blockNumber })), + ); + for (let i = 0; i < altSlots.length; i++) { + expect(slots[i].data).to.be.eq(BigInt(altSlots[i]!)); + } + } + + it("Test getting static storage slots", async () => { + const slots = await getStaticSlots(AMM, pool, publicClient, blockNumber); + await verifySlots(slots); + }); + + it("Test getting populated ticks slots", async () => { + const slots = await getTicksSlots(AMM, pool, TickMath.MIN_TICK, TickMath.MAX_TICK, publicClient, blockNumber); + await verifySlots(slots); + }); + + it("Test getting tick bitmap slots", async () => { + const slots = await getTickBitmapSlots(AMM, pool, publicClient, blockNumber); + await verifySlots(slots); + }); + + it("Test getting positions mapping slots", async () => { + const logs = await poolContract.getEvents.Mint( + {}, + { + fromBlock: blockNumber - 10000n, + toBlock: blockNumber, + }, + ); + const positions = logs.map(({ args: { owner, tickLower, tickUpper } }) => ({ + owner: owner!, + tickLower: tickLower!, + tickUpper: tickUpper!, + })); + const slots = await getPositionsSlots(AMM, pool, positions, publicClient, blockNumber); + await verifySlots(slots); + }); +}); diff --git a/test/hardhat/test.ts b/test/hardhat/univ3_test.ts similarity index 67% rename from test/hardhat/test.ts rename to test/hardhat/univ3_test.ts index 34dc62d..3690ff5 100644 --- a/test/hardhat/test.ts +++ b/test/hardhat/univ3_test.ts @@ -1,9 +1,8 @@ -import { ApertureSupportedChainId, getChainInfo, viem } from "@aperture_finance/uniswap-v3-automation-sdk"; -import { TickMath } from "@uniswap/v3-sdk"; +import { TickMath, computePoolAddress } from "@uniswap/v3-sdk"; import { expect } from "chai"; -import { config as dotenvConfig } from "dotenv"; -import { ContractFunctionReturnType, createPublicClient, getContract, http, toHex } from "viem"; +import { Address, ContractFunctionReturnType, createPublicClient, getContract, http, toHex } from "viem"; import { + AutomatedMarketMakerEnum, getAllPositionsByOwner, getPopulatedTicksInRange, getPositionDetails, @@ -14,31 +13,51 @@ import { getTickBitmapSlots, getTicksSlots, } from "../../src/viem"; -import { EphemeralGetPositions__factory, EphemeralPoolSlots__factory, IUniswapV3Pool__factory } from "../../typechain"; - -dotenvConfig(); +import { + EphemeralGetPositions__factory, + EphemeralPoolSlots__factory, + INonfungiblePositionManager__factory, + IUniswapV3Pool__factory, +} from "../../typechain"; +import { mainnet } from "viem/chains"; +import { Token } from "@uniswap/sdk-core"; -const chainId = ApertureSupportedChainId.ETHEREUM_MAINNET_CHAIN_ID; +const AMM = AutomatedMarketMakerEnum.enum.UNISWAP_V3; +const UNIV3_NPM = "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"; +const UNIV3_FACTORY = "0x1F98431c8aD98523631AE4a59f267346ea31F984"; const USDC_ADDRESS = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; const WETH_ADDRESS = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; -describe("Pool lens test", () => { - const { chain, uniswap_v3_factory, uniswap_v3_nonfungible_position_manager } = getChainInfo(chainId); +describe("Pool lens test with UniV3 on mainnet", () => { const publicClient = createPublicClient({ - chain, - transport: http(`https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`), + chain: mainnet, + transport: http("https://ethereum-rpc.publicnode.com"), batch: { multicall: true, }, }); - const blockNumber = 17000000n; - const pool = viem.computePoolAddress(uniswap_v3_factory, USDC_ADDRESS, WETH_ADDRESS, 500); + let blockNumber: bigint; + const pool = computePoolAddress({ + factoryAddress: UNIV3_FACTORY, + tokenA: new Token(mainnet.id, USDC_ADDRESS, 6, "USDC"), + tokenB: new Token(mainnet.id, WETH_ADDRESS, 18, "WETH"), + fee: 500, + }) as Address; const poolContract = getContract({ address: pool, abi: IUniswapV3Pool__factory.abi, client: publicClient, }); - const npm = viem.getNPM(chainId, publicClient); + const npm = getContract({ + address: UNIV3_NPM, + abi: INonfungiblePositionManager__factory.abi, + client: publicClient, + }); + + before(async () => { + blockNumber = (await publicClient.getBlockNumber()) - 64n; + console.log(`Running UniV3 tests on Ethereum mainnet at block number ${blockNumber}...`); + }); it("Test extsload", async () => { const slots = await getStorageAt( @@ -72,10 +91,15 @@ describe("Pool lens test", () => { tokenId, position: { token0, token1, fee }, slot0: { sqrtPriceX96, tick }, - } = await getPositionDetails(uniswap_v3_nonfungible_position_manager, 4n, publicClient, blockNumber); + } = await getPositionDetails(UNIV3_NPM, 4n, publicClient, blockNumber); expect(tokenId).to.be.eq(4n); const [_sqrtPriceX96, _tick] = await getContract({ - address: viem.computePoolAddress(uniswap_v3_factory, token0, token1, fee), + address: computePoolAddress({ + factoryAddress: UNIV3_FACTORY, + tokenA: new Token(mainnet.id, token0, 0, "NOT_USED"), + tokenB: new Token(mainnet.id, token1, 0, "NOT_USED"), + fee, + }) as Address, abi: IUniswapV3Pool__factory.abi, client: publicClient, }).read.slot0({ blockNumber }); @@ -101,7 +125,7 @@ describe("Pool lens test", () => { it("Test getting position array", async () => { const posArr = await getPositions( - uniswap_v3_nonfungible_position_manager, + UNIV3_NPM, Array.from({ length: 100 }, (_, i) => BigInt(i + 1)), publicClient, blockNumber, @@ -112,12 +136,7 @@ describe("Pool lens test", () => { it("Test getting all positions by owner", async () => { const totalSupply = await npm.read.totalSupply({ blockNumber }); const owner = await npm.read.ownerOf([totalSupply - 1n], { blockNumber }); - const posArr = await getAllPositionsByOwner( - uniswap_v3_nonfungible_position_manager, - owner, - publicClient, - blockNumber, - ); + const posArr = await getAllPositionsByOwner(UNIV3_NPM, owner, publicClient, blockNumber); await verifyPositionDetails(posArr); }); @@ -133,17 +152,17 @@ describe("Pool lens test", () => { } it("Test getting static storage slots", async () => { - const slots = await getStaticSlots(pool, publicClient, blockNumber); + const slots = await getStaticSlots(AMM, pool, publicClient, blockNumber); await verifySlots(slots); }); it("Test getting populated ticks slots", async () => { - const slots = await getTicksSlots(pool, TickMath.MIN_TICK, TickMath.MAX_TICK, publicClient, blockNumber); + const slots = await getTicksSlots(AMM, pool, TickMath.MIN_TICK, TickMath.MAX_TICK, publicClient, blockNumber); await verifySlots(slots); }); it("Test getting tick bitmap slots", async () => { - const slots = await getTickBitmapSlots(pool, publicClient, blockNumber); + const slots = await getTickBitmapSlots(AMM, pool, publicClient, blockNumber); await verifySlots(slots); }); @@ -160,7 +179,7 @@ describe("Pool lens test", () => { tickLower: tickLower!, tickUpper: tickUpper!, })); - const slots = await getPositionsSlots(pool, positions, publicClient, blockNumber); + const slots = await getPositionsSlots(AMM, pool, positions, publicClient, blockNumber); await verifySlots(slots); }); }); diff --git a/yarn.lock b/yarn.lock index 2924298..12c495e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,75 +7,17 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== -"@aperture_finance/uni-v3-lib@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@aperture_finance/uni-v3-lib/-/uni-v3-lib-1.2.0.tgz#bff3e43ac78e76a9cceb28dd60ae524afad49320" - integrity sha512-VOkbHi+NPTMQ+8A6lFa6hdtq5RCKZKTDVo0LAC0DSb5ls28B1x2dlFPu2kenW6SOtc1YJzMxi7SoNll4dP3tvA== - dependencies: - "@openzeppelin/contracts" "^5.0.0" - "@uniswap/v3-core" "^1.0.1" - "@uniswap/v3-periphery" "^1.4.4" - solady "^0.0.138" - -"@aperture_finance/uni-v3-lib@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@aperture_finance/uni-v3-lib/-/uni-v3-lib-1.2.1.tgz#1d96fab52af5009b602befc0216bd4325dc4e3c8" - integrity sha512-kue+CAK6GVsHCz3oqqiT0l5qZzDKl6dc9G/tsTqfgFhAUYoJcpDqMDtgKq5aQJFyLvDTqT2hHS1UJkhPAYMFSg== +"@aperture_finance/uni-v3-lib@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@aperture_finance/uni-v3-lib/-/uni-v3-lib-2.0.1.tgz#60a6f32a523a08491f884a39610fb224b1636b5f" + integrity sha512-m7R34aVy7WBGAOnA3Jw1uGVLUc1UoicN4nFoecFaTQcRz/INho9FF7KhvL7TbPqi3CUzSTkgntK+NSjo0tiVqA== dependencies: - "@openzeppelin/contracts" "^5.0.1" + "@openzeppelin/contracts" "^5.0.2" + "@pancakeswap/v3-core" "^1.0.2" + "@pancakeswap/v3-periphery" "^1.0.2" "@uniswap/v3-core" "^1.0.1" "@uniswap/v3-periphery" "^1.4.4" - solady "^0.0.155" - -"@aperture_finance/uniswap-v3-automation-sdk@^1.13.1": - version "1.13.1" - resolved "https://registry.yarnpkg.com/@aperture_finance/uniswap-v3-automation-sdk/-/uniswap-v3-automation-sdk-1.13.1.tgz#451454e05e745c8c97808e9af0f3a4302e9cab15" - integrity sha512-FTLBaVfV+Ah3RYrVEt+4Co5iGA3QWfWuglz62bgXKqaiF7FHSYV7vGIWQGuTeVKepvgp78A1VIf+VEMXSCJoUQ== - dependencies: - "@uniswap/v3-sdk" "^3.10.0" - aperture-lens "^0.3.0" - axios "^1.6.2" - big.js "^6.2.1" - ethers "5.7.2" - json-stable-stringify "^1.1.0" - viem "^1.20.3" - zod "^3.22.4" - -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" + solady "^0.0.180" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -275,7 +217,7 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -487,139 +429,95 @@ resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== -"@nomicfoundation/ethereumjs-block@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" - integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - -"@nomicfoundation/ethereumjs-blockchain@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" - integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-ethash" "3.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" - integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== - dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.2" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" - integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" - integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" - integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== - -"@nomicfoundation/ethereumjs-statemanager@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" - integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - js-sdsl "^4.1.4" - -"@nomicfoundation/ethereumjs-trie@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" - integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" - integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/edr-darwin-arm64@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.2.tgz#be1f696d429aecdf47d292a75958551e7cc34294" + integrity sha512-l6wfSBUUbGJiCENT6272CDI8yoMuf0sZH56H5qz3HnAyVzenkOvmzyF6/lar54m986kdAQqWls4cLvDxiOuLxg== + +"@nomicfoundation/edr-darwin-x64@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.2.tgz#efd2a5a302dc0a806fb2439a7e2c8ed7bd482ff8" + integrity sha512-OboExL7vEw+TRJQl3KkaEKU4K7PTdZPTInZ0fxMAtOpcWp7EKR+dQo68vc/iAOusB3xszHKxt7t+WpisItfdcg== + +"@nomicfoundation/edr-linux-arm64-gnu@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.2.tgz#4d7d4f28e13d426b5e3cf9731dbfed573f819245" + integrity sha512-xtEK+1eg++3pHi6405NDXd80S3CGOFEGQIyVGCwjMGQFOLSzBGGCsrb/0GB4J19zd1o/8ftCd/HjZcbVAWWTLQ== + +"@nomicfoundation/edr-linux-arm64-musl@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.2.tgz#10702ae4db386cc21efef9e6276bb56a09581e0a" + integrity sha512-3cIsskJOXQ1yEVsImmCacY7O03tUTiWrmd54F05PnPFrDLkjbzodQ3b2gUWzfbzUZWl67ZTJd1CvVSzpe7XGzw== + +"@nomicfoundation/edr-linux-x64-gnu@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.2.tgz#a29590bea8d490aa2129f2cb7fab1559ec9d25ee" + integrity sha512-ouPdphHNsyO7wqwa4hwahC5WqBglK/fIvMmhR/SXNZ9qruIpsA8ZZKIURaHMOv/2h2BbNGcyTX9uEk6+5rK/MQ== + +"@nomicfoundation/edr-linux-x64-musl@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.2.tgz#fe2b4c282c80c792b3a03e04d517d140a927cf92" + integrity sha512-sRhwhiPbkpJMOUwXW1FZw9ks6xWyQhIhM0E8o3TXEXKSPKTE6whQLEk1R37iFITaI36vb6rSwLKTU1cb32gCoA== + +"@nomicfoundation/edr-win32-arm64-msvc@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.2.tgz#6f09cf20f7e7be3ea70f61888cde238d924ec369" + integrity sha512-IEwVealKfumu1HSSnama26yPuQC/uthRPK5IWtFsQUOGwOXaS1r9Bu7cGYH2jBHl3IT/JbxD4xzPq/2pM9uK0A== + +"@nomicfoundation/edr-win32-ia32-msvc@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.2.tgz#ba4cd9744d95f491329efdfbefb527a8c9f5f31d" + integrity sha512-jYMnf6SFgguqROswwdsjJ1wvneD/5c16pVu9OD4DxNqhKNP5bHEw6L2N4DcJ89tpXMpJ6AlOpc0QuwzddiZ3tA== + +"@nomicfoundation/edr-win32-x64-msvc@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.2.tgz#331e3cea1618134e8d9f4ccb999086af6362a3af" + integrity sha512-Byn4QuWczRy/DUUQM3WjglgX/jGVUURVFaUsmIhnGg//MPlCLawubBGRqsrMuvaYedlIIJ4I2rgKvZlxdgHrqg== + +"@nomicfoundation/edr@^0.3.1": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.2.tgz#a81500746f8f8c342606a9be04a9f6176f8e2d54" + integrity sha512-HGWtjibAK1mo4I2A7nJ/fXqe/J9G54OrSPJnnkY2K8TiXotYLShGd9GvHkae3PuFjTJKm6ZgBy7tveJj5yrCfw== + optionalDependencies: + "@nomicfoundation/edr-darwin-arm64" "0.3.2" + "@nomicfoundation/edr-darwin-x64" "0.3.2" + "@nomicfoundation/edr-linux-arm64-gnu" "0.3.2" + "@nomicfoundation/edr-linux-arm64-musl" "0.3.2" + "@nomicfoundation/edr-linux-x64-gnu" "0.3.2" + "@nomicfoundation/edr-linux-x64-musl" "0.3.2" + "@nomicfoundation/edr-win32-arm64-msvc" "0.3.2" + "@nomicfoundation/edr-win32-ia32-msvc" "0.3.2" + "@nomicfoundation/edr-win32-x64-msvc" "0.3.2" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.4" + +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== + +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" - integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" - integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - debug "^4.3.3" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" "@nomicfoundation/hardhat-foundry@^1.1.1": version "1.1.1" @@ -699,6 +597,11 @@ resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== +"@openzeppelin/contracts-upgradeable@3.4.2-solc-0.7": + version "3.4.2-solc-0.7" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.2-solc-0.7.tgz#9a5cdaf9f65bcd9a3b7e865f44a6f672afe7785e" + integrity sha512-I5iKKS8U9L1XdSxsNAIBQekN0U9hTgdleoyntIdR7Jy3U/z/NZ/1oUM0v5HnUMrmn/bXLvYL94rBvaLF++Ndnw== + "@openzeppelin/contracts@3.4.1-solc-0.7-2": version "3.4.1-solc-0.7-2" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz#371c67ebffe50f551c3146a9eec5fe6ffe862e92" @@ -709,10 +612,71 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz#38f4dbab672631034076ccdf2f3201fab1726635" integrity sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA== -"@openzeppelin/contracts@^5.0.0", "@openzeppelin/contracts@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.1.tgz#93da90fc209a0a4ff09c1deb037fbb35e4020890" - integrity sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w== +"@openzeppelin/contracts@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.2.tgz#b1d03075e49290d06570b2fd42154d76c2a5d210" + integrity sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA== + +"@pancakeswap/chains@0.4.1", "@pancakeswap/chains@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@pancakeswap/chains/-/chains-0.4.1.tgz#f8dacc6cf7c8f7e8f05665ca0e9b7ff17620212e" + integrity sha512-b7O/oOqtwIkQj1FxGTKbJ1qH7COgD/rkV7JfSpxxIVcH5DZHPhj/P+IdpnlY0hVC1/BHEcvLnjGlSpaywLEOrQ== + +"@pancakeswap/sdk@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@pancakeswap/sdk/-/sdk-5.8.0.tgz#15c0925d4716de4bbce0789c3dd4c7e1eddd302f" + integrity sha512-gDeeDwq38xMxuvVSASjX4HxRbKfrdNlJQJwwo7dEpExwRJb1QKrMeFEKl1dTW/zReeiIW+bvXseTYQnY8hAmKQ== + dependencies: + "@pancakeswap/chains" "^0.4.1" + "@pancakeswap/swap-sdk-core" "1.1.0" + big.js "^5.2.2" + decimal.js-light "^2.5.0" + tiny-invariant "^1.3.0" + tiny-warning "^1.0.3" + toformat "^2.0.0" + viem "1.19.11" + +"@pancakeswap/swap-sdk-core@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pancakeswap/swap-sdk-core/-/swap-sdk-core-1.1.0.tgz#4edc1ef77db9188a1f90153b1983c72326a942e4" + integrity sha512-RBl7M8NoViUeRJuISvkYXCwzeNRjGyMPhZTenJyHVrrkV0Wb37S8RCPirYzVt/63YtU0ZxXHcqCxD64XogtE/Q== + dependencies: + big.js "^5.2.2" + decimal.js-light "^2.5.0" + tiny-invariant "^1.3.0" + tiny-warning "^1.0.3" + toformat "^2.0.0" + +"@pancakeswap/v3-core@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pancakeswap/v3-core/-/v3-core-1.0.2.tgz#f5abf6a98535f33edebbfc11ab40b4fdcee51420" + integrity sha512-9aZU8I1J6SbZOSW7NcNxuyaAC17tGkOaZJM9aJgvl6MMUOExpq0i0EC/jc3HxWbpC8sbZL+8eG544NEJs8CS+w== + +"@pancakeswap/v3-periphery@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pancakeswap/v3-periphery/-/v3-periphery-1.0.2.tgz#f5b899c60bae0fadcfff1cc2b72c802b9d5a5596" + integrity sha512-kWQhJsAG5Ij1cubKlX0JuJ3GEPFiPBR+NQt77SxHNjk62eallLyfbWJYk2NMnTO0crbjBFO5GKKQAXfp2n76vg== + dependencies: + "@openzeppelin/contracts" "3.4.2-solc-0.7" + "@openzeppelin/contracts-upgradeable" "3.4.2-solc-0.7" + "@uniswap/lib" "^4.0.1-alpha" + "@uniswap/v2-core" "1.0.1" + base64-sol "1.0.1" + +"@pancakeswap/v3-sdk@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@pancakeswap/v3-sdk/-/v3-sdk-3.8.0.tgz#5a6fc4c25fe7ef463d3bfb8c7c9d63e6f8a4f8af" + integrity sha512-ylGzJiYsSPUa3Qth5BOCC6iww+PvJwR+qn1jplv8LuvDZe9gx6EHusgWHkJquAPaQ9i7kTF5T3QJKGlA/SUMbA== + dependencies: + "@pancakeswap/chains" "0.4.1" + "@pancakeswap/sdk" "5.8.0" + "@pancakeswap/swap-sdk-core" "1.1.0" + big.js "^5.2.2" + decimal.js-light "^2.5.0" + tiny-invariant "^1.3.0" + tiny-warning "^1.0.3" + toformat "^2.0.0" + viem "1.19.11" "@scure/base@~1.1.0", "@scure/base@~1.1.2": version "1.1.5" @@ -854,10 +818,10 @@ lodash "^4.17.15" ts-essentials "^7.0.1" -"@typechain/hardhat@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-7.0.0.tgz#ffa7465328150e793007fee616ae7b76ed20784d" - integrity sha512-XB79i5ewg9Met7gMVGfgVkmypicbnI25T5clJBEooMoW2161p4zvKFpoS2O+lBppQyMrPIZkdvl2M3LMDayVcA== +"@typechain/hardhat@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== dependencies: fs-extra "^9.1.0" @@ -875,10 +839,10 @@ dependencies: "@types/node" "*" -"@types/chai@^4.3.11": - version "4.3.11" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" - integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== +"@types/chai@^4.3.14": + version "4.3.14" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.14.tgz#ae3055ea2be43c91c9fd700a36d67820026d96e6" + integrity sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w== "@types/lru-cache@^5.1.0": version "5.1.1" @@ -890,13 +854,20 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== -"@types/node@*", "@types/node@^20.10.6": +"@types/node@*": version "20.10.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5" integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw== dependencies: undici-types "~5.26.4" +"@types/node@^20.11.30": + version "20.11.30" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.30.tgz#9c33467fc23167a347e73834f788f4b9f399d66f" + integrity sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw== + dependencies: + undici-types "~5.26.4" + "@types/pbkdf2@^3.0.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" @@ -909,14 +880,6 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - "@types/secp256k1@^4.0.1": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" @@ -929,10 +892,10 @@ resolved "https://registry.yarnpkg.com/@uniswap/lib/-/lib-4.0.1-alpha.tgz#2881008e55f075344675b3bca93f020b028fbd02" integrity sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA== -"@uniswap/sdk-core@^4": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@uniswap/sdk-core/-/sdk-core-4.0.10.tgz#6173cc39d4e6b5ed679775447bb96a5b3c3fb2f2" - integrity sha512-RiobXJKXvVVb+wfNM09Ik8djOMOuRQGfyRP5pHgUjojicK/7nscZILjZ87DjVCGjXEoD8yTSIps0UAQuz6pJIw== +"@uniswap/sdk-core@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@uniswap/sdk-core/-/sdk-core-4.2.0.tgz#9930f133baec9c1118d891ebf8fcba7f7efc153d" + integrity sha512-yXAMLHZRYYuh6KpN2nOlLTYBjGiopmI9WUB4Z0tyNkW4ZZub54cUt22eibpGbZAhRAMxclox9IPIs6wwrM3soQ== dependencies: "@ethersproject/address" "^5.0.2" big.js "^5.2.2" @@ -953,7 +916,7 @@ dotenv "^14.2.0" hardhat-watcher "^2.1.1" -"@uniswap/v2-core@^1.0.1": +"@uniswap/v2-core@1.0.1", "@uniswap/v2-core@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@uniswap/v2-core/-/v2-core-1.0.1.tgz#af8f508bf183204779938969e2e54043e147d425" integrity sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q== @@ -979,14 +942,14 @@ "@uniswap/v3-core" "^1.0.0" base64-sol "1.0.1" -"@uniswap/v3-sdk@^3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@uniswap/v3-sdk/-/v3-sdk-3.10.0.tgz#962c9e598250ced00702d944783c2d9ee3fa12f6" - integrity sha512-sbmSA1O+Ct960r66Ie/c1rOmVadpwRu8nQ79pGICv0pZJdnFIQ/SReG3F+iC2C2UNNjNP6aC2WDUggXrjyrgnA== +"@uniswap/v3-sdk@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@uniswap/v3-sdk/-/v3-sdk-3.11.0.tgz#328309fbafddd8c618b7b6850bb99cacf6733a79" + integrity sha512-gz6Q6SlN34AXvxhyz181F90D4OuIkxLnzBAucEzB9Fv3Z+3orHZY/SpGaD02nP1VsNQVu/DQvOsdkPUDGn1Y9Q== dependencies: "@ethersproject/abi" "^5.0.12" "@ethersproject/solidity" "^5.0.9" - "@uniswap/sdk-core" "^4" + "@uniswap/sdk-core" "^4.2.0" "@uniswap/swap-router-contracts" "^1.2.1" "@uniswap/v3-periphery" "^1.1.1" "@uniswap/v3-staker" "1.0.0" @@ -1012,19 +975,6 @@ abitype@1.0.0: resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - acorn-walk@^8.1.1: version "8.3.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" @@ -1060,6 +1010,13 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1104,16 +1061,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aperture-lens@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/aperture-lens/-/aperture-lens-0.3.0.tgz#cc7d76fb84fece4064505cdef882d5a1c18f8f9a" - integrity sha512-nUkPpgy5G25XyHwll1jC02g/lpWs/zaDsCOzOYJv5WvNmOIJUeQ7lNTdbE/01s1+ro+ZJFOE4hLB9C++9G3zzQ== - dependencies: - "@aperture_finance/uni-v3-lib" "^1.2.0" - "@openzeppelin/contracts" "^5.0.1" - ethers "5.7.2" - viem "^1.20.1" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -1139,25 +1086,11 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -axios@^1.6.2: - version "1.6.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.4.tgz#184ee1f63d412caffcf30d2c50982253c3ee86e0" - integrity sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A== - dependencies: - follow-redirects "^1.15.4" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1170,11 +1103,6 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - base64-sol@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/base64-sol/-/base64-sol-1.0.1.tgz#91317aa341f0bc763811783c5729f1c2574600f6" @@ -1190,16 +1118,6 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -big.js@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.1.tgz#7205ce763efb17c2e41f26f121c420c6a7c2744f" - integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== - -bigint-crypto-utils@^3.0.23: - version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" - integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1220,6 +1138,20 @@ bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1247,16 +1179,6 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -1300,47 +1222,20 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -chai@^4.3.10: - version "4.3.10" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== +chai@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== dependencies: assertion-error "^1.1.0" check-error "^1.0.3" @@ -1374,7 +1269,7 @@ check-error@^1.0.3: dependencies: get-func-name "^2.0.2" -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.3: +chokidar@3.5.3, chokidar@^3.4.0: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -1389,6 +1284,21 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1402,22 +1312,16 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -classic-level@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" - integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -1451,13 +1355,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - command-exists@^1.2.8: version "1.2.9" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" @@ -1498,11 +1395,6 @@ cookie@^0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -1531,7 +1423,7 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1560,20 +1452,6 @@ deep-extend@~0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -1692,7 +1570,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@5.7.2, ethers@^5.7.1: +ethers@5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -1778,20 +1656,11 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.12.1, follow-redirects@^1.15.4: +follow-redirects@^1.12.1: version "1.15.4" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -1842,16 +1711,6 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -1862,16 +1721,6 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1903,6 +1752,17 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -1915,13 +1775,6 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -1934,23 +1787,17 @@ hardhat-watcher@^2.1.1: dependencies: chokidar "^3.5.3" -hardhat@^2.19.4: - version "2.19.4" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.4.tgz#5112c30295d8be2e18e55d847373c50483ed1902" - integrity sha512-fTQJpqSt3Xo9Mn/WrdblNGAfcANM6XC3tAEi6YogB4s02DmTf93A8QsGb8uR0KR8TFcpcS8lgiW4ugAIYpnbrQ== +hardhat@^2.22.2: + version "2.22.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.2.tgz#0cadd7ec93bf39bab09f81603e75bc5e92acea3d" + integrity sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/edr" "^0.3.1" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -1958,6 +1805,7 @@ hardhat@^2.19.4: adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" + boxen "^5.1.2" chalk "^2.4.2" chokidar "^3.4.0" ci-info "^2.0.0" @@ -1998,23 +1846,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - hash-base@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -2032,13 +1863,6 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -2079,11 +1903,6 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - immutable@^4.0.0-rc.12: version "4.3.4" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" @@ -2121,11 +1940,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2163,21 +1977,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isows@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -2195,16 +1999,6 @@ jsbi@^3.1.4: resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== -json-stable-stringify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.0.tgz#43d39c7c8da34bfaf785a61a56808b0def9f747d" - integrity sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -2228,11 +2022,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - keccak@^3.0.0, keccak@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" @@ -2249,27 +2038,6 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== - dependencies: - browser-level "^1.0.1" - classic-level "^1.2.0" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -2310,13 +2078,6 @@ loupe@^2.3.6: dependencies: get-func-name "^2.0.1" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2334,11 +2095,6 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -2348,32 +2104,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2398,6 +2133,13 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -2410,7 +2152,7 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@^10.0.0, mocha@^10.2.0: +mocha@^10.0.0: version "10.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== @@ -2437,10 +2179,31 @@ mocha@^10.0.0, mocha@^10.2.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== +mocha@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" ms@2.1.2: version "2.1.2" @@ -2457,17 +2220,12 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: +node-gyp-build@^4.2.0: version "4.7.1" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.7.1.tgz#cd7d2eb48e594874053150a9418ac85af83ca8f7" integrity sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg== @@ -2477,11 +2235,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - obliterator@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" @@ -2594,20 +2347,10 @@ prettier@^2.3.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prettier@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" - integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +prettier@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== randombytes@^2.1.0: version "2.1.0" @@ -2686,28 +2429,11 @@ rlp@^2.2.3: dependencies: bn.js "^5.2.0" -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -2751,16 +2477,6 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -2779,15 +2495,10 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -solady@^0.0.138: - version "0.0.138" - resolved "https://registry.yarnpkg.com/solady/-/solady-0.0.138.tgz#efa7849b35e46301d2f334db04ac731c59efd466" - integrity sha512-5jRi1IwgoE3+2kVo/zIPRYaSdQhypl2qmmZQj03y9tq6OiswXLYaag7kvhvp6v+iBFSlO2bYgsk8KFXQcX256w== - -solady@^0.0.155: - version "0.0.155" - resolved "https://registry.yarnpkg.com/solady/-/solady-0.0.155.tgz#855cd63190902c4167e8501d74d72272a0285067" - integrity sha512-UVFZxRNe+Iv3B2Z0dfo2Pngg4lyeHE1QqpI5wDS5bdhsCUfgEzhFZxQN7DJ6lKy3hSyF39ldGLKlCCEJp7EM4Q== +solady@^0.0.180: + version "0.0.180" + resolved "https://registry.yarnpkg.com/solady/-/solady-0.0.180.tgz#d806c84a0bf8b6e3d85a8fb0978980de086ff59e" + integrity sha512-9QVCyMph+wk78Aq/GxtDAQg7dvNoVWx2dS2Zwf11XlwFKDZ+YJG2lrQsK9NEIth9NOebwjBXAYk4itdwOOE4aw== solc@0.7.3: version "0.7.3" @@ -2839,7 +2550,7 @@ string-format@^2.0.0: resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2905,10 +2616,10 @@ table-layout@^1.0.2: typical "^5.2.0" wordwrapjs "^4.0.0" -tiny-invariant@^1.1.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== +tiny-invariant@^1.1.0, tiny-invariant@^1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== tiny-warning@^1.0.3: version "1.0.3" @@ -2998,6 +2709,11 @@ type-detect@^4.0.0, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -3024,10 +2740,10 @@ typechain@^8.3.2: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" -typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@^5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== typical@^4.0.0: version "4.0.0" @@ -3081,10 +2797,10 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -viem@^1.20.1, viem@^1.20.3: - version "1.21.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" - integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== +viem@1.19.11: + version "1.19.11" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.19.11.tgz#de4ee7537ee036894bd818aa316a8faecaf017e9" + integrity sha512-dbsXEWDBZkByuzJXAs/e01j7dpUJ5ICF5WcyntFwf8Y97n5vnC/91lAleSa6DA5V4WJvYZbhDpYeTctsMAQnhA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -3095,10 +2811,10 @@ viem@^1.20.1, viem@^1.20.3: isows "1.0.3" ws "8.13.0" -viem@^2.7.9: - version "2.7.9" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.9.tgz#0d2b0c4722530b53fbef449d70f0cedc1bb867b0" - integrity sha512-iDfc8TwaZFp1K95zlsxYh6Cs0OWCt35Tqs8uYgXKSxtz7w075mZ0H5SJ8zSyJGoEaticVDhtdmRRX6TtcW9EeQ== +viem@^2.9.6: + version "2.9.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.6.tgz#66819684e878b6ea659ad9c49a0a864512859190" + integrity sha512-VVFWjGQei2wnWTvAB/xrIf22m6flCwxeBr8LnwejXMTSSi1EORWEswrw2lfKTmw3TlRPSG4uSiQMa/d0l0DKRg== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -3109,6 +2825,13 @@ viem@^2.7.9: isows "1.0.3" ws "8.13.0" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + wordwrapjs@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" @@ -3156,11 +2879,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"