```\nunction testAttack() public {\n        mockRootPrice(WSTETH, 1_123_300_000_000_000_000); //wstETH\n        mockRootPrice(CBETH, 1_034_300_000_000_000_000); //cbETH\n\n        IBalancerMetaStablePool pool = IBalancerMetaStablePool(WSTETH_CBETH_POOL);\n\n        address[] memory assets = new address[](2);\n        assets[0] = WSTETH;\n        assets[1] = CBETH;\n        uint256[] memory amounts = new uint256[](2);\n        amounts[0] = 10_000 ether;\n        amounts[1] = 0;\n\n        IBalancerVault.JoinPoolRequest memory joinRequest = IBalancerVault.JoinPoolRequest({\n            assets: assets,\n            maxAmountsIn: amounts, // maxAmountsIn,\n            userData: abi.encode(\n                IBalancerVault.JoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,\n                amounts, //maxAmountsIn,\n                0\n            ),\n            fromInternalBalance: false\n        });\n\n        IBalancerVault.SingleSwap memory swapRequest = IBalancerVault.SingleSwap({\n            poolId: 0x9c6d47ff73e0f5e51be5fd53236e3f595c5793f200020000000000000000042c,\n            kind: IBalancerVault.SwapKind.GIVEN_IN,\n            assetIn: WSTETH,\n            assetOut: CBETH,\n            amount: amounts[0],\n            userData: abi.encode(\n                IBalancerVault.JoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,\n                amounts, //maxAmountsIn,\n                0\n            )\n        });\n\n        IBalancerVault.FundManagement memory funds = IBalancerVault.FundManagement({\n            sender: address(this),\n            fromInternalBalance: false,\n            recipient: payable(address(this)),\n            toInternalBalance: false\n        });\n\n        emit log_named_uint("Gas before price1", gasleft());\n        uint256 price1 = oracle.getPriceInEth(WSTETH_CBETH_POOL);\n        emit log_named_uint("price1", price1);\n        emit log_named_uint("Gas after price1 ", gasleft());\n    }\n```\n