Repository: Uniswap/v3-info Branch: master Commit: 43e5b31f1a8a Files: 207 Total size: 1.5 MB Directory structure: gitextract_o05rca_m/ ├── .eslintrc.json ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.md │ │ ├── config.yml │ │ └── feature-request.md │ └── workflows/ │ └── semgrep.yml ├── .gitignore ├── .nvmrc ├── .prettierrc ├── .yarnrc ├── LICENSE ├── README.md ├── cypress.json ├── package.json ├── public/ │ ├── 451.html │ ├── index.html │ ├── locales/ │ │ ├── de.json │ │ ├── en.json │ │ ├── es-AR.json │ │ ├── es-US.json │ │ ├── it-IT.json │ │ ├── iw.json │ │ ├── ro.json │ │ ├── ru.json │ │ ├── vi.json │ │ ├── zh-CN.json │ │ └── zh-TW.json │ └── manifest.json ├── schema.json ├── src/ │ ├── apollo/ │ │ └── client.ts │ ├── components/ │ │ ├── BarChart/ │ │ │ ├── alt.tsx │ │ │ └── index.tsx │ │ ├── Button/ │ │ │ └── index.tsx │ │ ├── CandleChart/ │ │ │ └── index.tsx │ │ ├── Card/ │ │ │ └── index.tsx │ │ ├── Column/ │ │ │ └── index.tsx │ │ ├── Confetti/ │ │ │ └── index.tsx │ │ ├── CurrencyLogo/ │ │ │ └── index.tsx │ │ ├── DensityChart/ │ │ │ ├── CurrentPriceLabel.tsx │ │ │ ├── CustomToolTip.tsx │ │ │ └── index.tsx │ │ ├── DoubleLogo/ │ │ │ └── index.tsx │ │ ├── FormattedCurrencyAmount/ │ │ │ └── index.tsx │ │ ├── Header/ │ │ │ ├── Polling.tsx │ │ │ ├── TopBar.tsx │ │ │ ├── URLWarning.tsx │ │ │ └── index.tsx │ │ ├── HoverInlineText/ │ │ │ └── index.tsx │ │ ├── LineChart/ │ │ │ ├── alt.tsx │ │ │ └── index.tsx │ │ ├── ListLogo/ │ │ │ └── index.tsx │ │ ├── Loader/ │ │ │ └── index.tsx │ │ ├── Logo/ │ │ │ └── index.tsx │ │ ├── Menu/ │ │ │ ├── NetworkDropdown.tsx │ │ │ └── index.tsx │ │ ├── Modal/ │ │ │ └── index.tsx │ │ ├── NumericalInput/ │ │ │ └── index.tsx │ │ ├── Percent/ │ │ │ └── index.tsx │ │ ├── Popover/ │ │ │ └── index.tsx │ │ ├── Popups/ │ │ │ ├── ListUpdatePopup.tsx │ │ │ ├── PopupItem.tsx │ │ │ └── index.tsx │ │ ├── QuestionHelper/ │ │ │ └── index.tsx │ │ ├── Row/ │ │ │ └── index.tsx │ │ ├── Search/ │ │ │ └── index.tsx │ │ ├── Text/ │ │ │ └── index.ts │ │ ├── Toggle/ │ │ │ ├── ListToggle.tsx │ │ │ ├── MultiToggle.tsx │ │ │ └── index.tsx │ │ ├── Tooltip/ │ │ │ └── index.tsx │ │ ├── TransactionsTable/ │ │ │ └── index.tsx │ │ ├── pools/ │ │ │ ├── PoolTable.tsx │ │ │ └── TopPoolMovers.tsx │ │ ├── shared/ │ │ │ └── index.tsx │ │ └── tokens/ │ │ ├── TokenTable.tsx │ │ └── TopTokenMovers.tsx │ ├── constants/ │ │ ├── abis/ │ │ │ ├── argent-wallet-detector.json │ │ │ ├── argent-wallet-detector.ts │ │ │ ├── ens-public-resolver.json │ │ │ ├── ens-registrar.json │ │ │ ├── erc20.json │ │ │ ├── erc20.ts │ │ │ ├── erc20_bytes32.json │ │ │ ├── migrator.json │ │ │ ├── migrator.ts │ │ │ ├── staking-rewards.ts │ │ │ ├── unisocks.json │ │ │ └── weth.json │ │ ├── chains.ts │ │ ├── index.ts │ │ ├── intervals.ts │ │ ├── lists.ts │ │ ├── multicall/ │ │ │ ├── abi.json │ │ │ └── index.ts │ │ ├── networks.ts │ │ └── tokenLists/ │ │ └── uniswap-v2-unsupported.tokenlist.json │ ├── data/ │ │ ├── application/ │ │ │ └── index.ts │ │ ├── combined/ │ │ │ └── pools.ts │ │ ├── pools/ │ │ │ ├── chartData.ts │ │ │ ├── poolData.ts │ │ │ ├── tickData.ts │ │ │ ├── topPools.ts │ │ │ └── transactions.ts │ │ ├── protocol/ │ │ │ ├── chart.ts │ │ │ ├── derived.ts │ │ │ ├── overview.ts │ │ │ └── transactions.ts │ │ ├── search/ │ │ │ └── index.ts │ │ └── tokens/ │ │ ├── chartData.ts │ │ ├── poolsForToken.ts │ │ ├── priceData.ts │ │ ├── tokenData.ts │ │ ├── topTokens.ts │ │ └── transactions.ts │ ├── hooks/ │ │ ├── chart.ts │ │ ├── useAppDispatch.ts │ │ ├── useBlocksFromTimestamps.ts │ │ ├── useCMCLink.ts │ │ ├── useColor.ts │ │ ├── useCopyClipboard.ts │ │ ├── useDebounce.ts │ │ ├── useEthPrices.ts │ │ ├── useFetchListCallback.ts │ │ ├── useHttpLocations.ts │ │ ├── useInterval.ts │ │ ├── useIsWindowVisible.ts │ │ ├── useLast.ts │ │ ├── useOnClickOutside.tsx │ │ ├── useParsedQueryString.ts │ │ ├── usePrevious.ts │ │ ├── useTheme.ts │ │ ├── useToggle.ts │ │ ├── useToggledVersion.ts │ │ └── useWindowSize.ts │ ├── i18n.ts │ ├── index.tsx │ ├── pages/ │ │ ├── App.tsx │ │ ├── Home/ │ │ │ └── index.tsx │ │ ├── Pool/ │ │ │ ├── PoolPage.tsx │ │ │ └── PoolsOverview.tsx │ │ ├── Protocol/ │ │ │ └── index.tsx │ │ ├── Token/ │ │ │ ├── TokenPage.tsx │ │ │ ├── TokensOverview.tsx │ │ │ └── redirects.tsx │ │ ├── Wallets/ │ │ │ └── index.tsx │ │ └── styled.ts │ ├── react-app-env.d.ts │ ├── state/ │ │ ├── application/ │ │ │ ├── actions.ts │ │ │ ├── hooks.ts │ │ │ ├── reducer.ts │ │ │ └── updater.ts │ │ ├── global/ │ │ │ └── actions.ts │ │ ├── index.ts │ │ ├── lists/ │ │ │ ├── actions.ts │ │ │ ├── hooks.ts │ │ │ ├── reducer.test.ts │ │ │ ├── reducer.ts │ │ │ ├── updater.ts │ │ │ └── wrappedTokenInfo.ts │ │ ├── pools/ │ │ │ ├── actions.ts │ │ │ ├── hooks.ts │ │ │ ├── reducer.ts │ │ │ └── updater.ts │ │ ├── protocol/ │ │ │ ├── actions.ts │ │ │ ├── hooks.ts │ │ │ ├── reducer.ts │ │ │ └── updater.ts │ │ ├── tokens/ │ │ │ ├── actions.ts │ │ │ ├── hooks.ts │ │ │ ├── reducer.ts │ │ │ └── updater.ts │ │ └── user/ │ │ ├── actions.ts │ │ ├── hooks.tsx │ │ ├── reducer.test.ts │ │ ├── reducer.ts │ │ └── updater.tsx │ ├── theme/ │ │ ├── DarkModeQueryParamReader.tsx │ │ ├── components.tsx │ │ ├── index.tsx │ │ ├── rebass.d.ts │ │ └── styled.d.ts │ ├── types/ │ │ └── index.ts │ └── utils/ │ ├── chunkArray.test.ts │ ├── chunkArray.ts │ ├── contenthashToUri.test.skip.ts │ ├── contenthashToUri.ts │ ├── currencyId.ts │ ├── data.ts │ ├── date.ts │ ├── getLibrary.ts │ ├── getTokenList.ts │ ├── index.ts │ ├── isZero.ts │ ├── listSort.ts │ ├── listVersionLabel.ts │ ├── networkPrefix.ts │ ├── numbers.ts │ ├── parseENSAddress.test.ts │ ├── parseENSAddress.ts │ ├── queries.ts │ ├── resolveENSContentHash.ts │ ├── retry.test.ts │ ├── retry.ts │ ├── tokens.ts │ ├── uriToHttp.test.ts │ ├── uriToHttp.ts │ └── useDebouncedChangeHandler.tsx └── tsconfig.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .eslintrc.json ================================================ { "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": 2020, "sourceType": "module", "ecmaFeatures": { // Allows for the parsing of JSX "jsx": true } }, "ignorePatterns": ["node_modules/**/*"], "settings": { "react": { "version": "detect" } }, "extends": [ "plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:react-hooks/recommended", "plugin:prettier/recommended" ], "rules": { "@typescript-eslint/explicit-function-return-type": "off", "prettier/prettier": "error", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/ban-ts-ignore": "off" } } ================================================ FILE: .github/ISSUE_TEMPLATE/bug-report.md ================================================ --- name: Bug Report about: Describe an issue in the Uniswap Interface title: '' labels: bug assignees: '' --- **Bug Description** A clear and concise description of the bug. **Steps to Reproduce** 1. Go to ... 2. Click on ... ... **Expected Behavior** A clear and concise description of what you expected to happen. **Additional Context** Add any other context about the problem here (screenshots, whether the bug only occurs only in certain mobile/desktop/browser environments, etc.) ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Support url: https://discord.gg/FCfyBSbCU5 about: Please ask and answer questions here - name: List a token url: https://github.com/Uniswap/default-token-list#adding-a-token about: Any requests to add a token to Uniswap should go here ================================================ FILE: .github/ISSUE_TEMPLATE/feature-request.md ================================================ --- name: Feature Request about: Suggest an idea for improving the UX of the Uniswap Interface title: '' labels: 'improvement' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/workflows/semgrep.yml ================================================ name: Semgrep on: workflow_dispatch: {} pull_request: {} push: branches: - main - master schedule: # random HH:MM to avoid a load spike on GitHub Actions at 00:00 - cron: '35 11 * * *' jobs: semgrep: name: semgrep/ci runs-on: ubuntu-20.04 env: SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} container: image: returntocorp/semgrep if: (github.actor != 'dependabot[bot]') steps: - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 - run: semgrep ci ================================================ FILE: .gitignore ================================================ node_modules .DS_Store build .vscode/ ================================================ FILE: .nvmrc ================================================ v18 ================================================ FILE: .prettierrc ================================================ { "semi": false, "singleQuote": true, "printWidth": 120, "endOfLine": "auto" } ================================================ FILE: .yarnrc ================================================ ignore-scripts true ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: README.md ================================================ ## Uniswap Info V3 An open sourced interface for Uniswap V3 analytics. Info URL: https://info.uniswap.org/#/ ## Development ### Install Dependencies ```bash yarn ``` ### Run ```bash yarn start ``` ## Contributions **Please open all pull requests against the `master` branch.** CI checks will run against all PRs. ================================================ FILE: cypress.json ================================================ { "baseUrl": "http://localhost:3000", "pluginsFile": false, "fixturesFolder": false, "supportFile": "cypress/support/index.js", "video": false, "defaultCommandTimeout": 10000 } ================================================ FILE: package.json ================================================ { "name": "@uniswap/interface", "description": "Uniswap Interface", "homepage": ".", "private": true, "devDependencies": { "@emotion/core": "^11.0.0", "@popperjs/core": "^2.4.4", "@reach/dialog": "^0.10.3", "@reach/portal": "^0.10.3", "@reduxjs/toolkit": "^1.3.5", "@styled-system/css": "^5.1.5", "@types/jest": "^25.2.1", "@types/lodash.flatmap": "^4.5.6", "@types/lodash.keyby": "^4.6.6", "@types/luxon": "^1.24.4", "@types/multicodec": "^1.0.0", "@types/node": "^20.8.7", "@types/qs": "^6.9.2", "@types/react": "18.2.21", "@types/react-dom": "^18.2.14", "@types/react-redux": "^7.1.28", "@types/react-router-dom": "^5.3.3", "@types/react-virtualized-auto-sizer": "^1.0.2", "@types/react-window": "^1.8.7", "@types/rebass": "^4.0.12", "@types/styled-components": "^5.1.29", "@types/testing-library__cypress": "^5.0.5", "@types/wcag-contrast": "^3.0.0", "@typescript-eslint/eslint-plugin": "^6.8.0", "@typescript-eslint/parser": "^6.8.0", "@uniswap/governance": "^1.0.2", "@uniswap/liquidity-staker": "^1.0.2", "@uniswap/merkle-distributor": "1.0.1", "@uniswap/sdk-core": "^4.0.9", "@uniswap/token-lists": "^1.0.0-beta.27", "@uniswap/v2-core": "^1.0.1", "@uniswap/v2-periphery": "^1.1.0-beta.0", "@uniswap/v3-sdk": "^3.10.0", "@web3-react/core": "^8.2.3", "ajv": "^6.12.3", "cids": "^1.0.0", "copy-to-clipboard": "^3.2.0", "cross-env": "^7.0.2", "cypress": "^4.11.0", "eslint": "^8.51.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "ethers": "^6.8.0", "i18next": "^15.0.9", "i18next-browser-languagedetector": "^3.0.1", "i18next-xhr-backend": "^2.0.1", "inter-ui": "^3.13.1", "jazzicon": "^1.5.0", "lodash.flatmap": "^4.5.0", "lodash.keyby": "^4.6.0", "luxon": "^1.25.0", "multicodec": "^2.0.0", "multihashes": "^3.0.1", "node-vibrant": "^3.1.5", "polished": "^3.3.2", "prettier": "^3.0.3", "qs": "^6.9.4", "react": "^18.2.0", "react-confetti": "^6.0.0", "react-device-detect": "^1.6.2", "react-dom": "^18.2.0", "react-feather": "^2.0.8", "react-i18next": "^10.7.0", "react-markdown": "^4.3.1", "react-popper": "^2.2.3", "react-redux": "^8.1.3", "react-router-dom": "^6.17.0", "react-scripts": "^5.0.1", "react-spring": "^8.0.27", "react-use-gesture": "^6.0.14", "react-virtualized-auto-sizer": "^1.0.20", "react-window": "^1.8.9", "rebass": "^4.0.7", "redux-localstorage-simple": "^2.3.1", "serve": "^11.3.0", "start-server-and-test": "^1.11.0", "styled-components": "^6.1.0", "styled-system": "^5.1.5", "typescript": "^5.2.2", "use-count-up": "^2.2.5", "wcag-contrast": "^3.0.0" }, "resolutions": { "@walletconnect/web3-provider": "1.1.1-alpha.0", "**/@types/react": "18.2.21", "**/@web3-react/types": "8.2.3" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "eject": "react-scripts eject", "integration-test": "start-server-and-test 'serve build -l 3000' http://localhost:3000 'cypress run'", "storybook": "start-storybook -p 6006", "test": "react-scripts test --env=jsdom", "lint": "yarn eslint --ignore-path .gitignore --cache --cache-location node_modules/.cache/eslint/ .", "codegen:schema": "npx apollo client:download-schema --endpoint=https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-rinkeby", "codegen:generate": "apollo codegen:generate --localSchemaFile=schema.json --target=typescript --includes=src/**/*.ts --tagName=gql --addTypename --globalTypesFile=src/types/graphql-global-types.ts types", "deduplicate": "yarn-deduplicate --strategy=highest" }, "eslintConfig": { "extends": "react-app", "ignorePatterns": [ "node_modules" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "license": "GPL-3.0-or-later", "dependencies": { "@apollo/client": "^3.8.6", "@data-ui/histogram": "^0.0.84", "@ethersproject/experimental": "^5.7.0", "@types/ms": "^0.7.33", "@types/numeral": "^2.0.1", "@types/ua-parser-js": "^0.7.38", "@uniswap/analytics": "^1.6.0", "@uniswap/analytics-events": "^2.25.0", "@uniswap/default-token-list": "^2.0.0", "apollo-cache-inmemory": "^1.6.6", "apollo-client": "^2.6.10", "apollo-link-http": "^1.5.17", "dayjs": "^1.10.4", "graphql": "^15.5.0", "graphql-tag": "^2.11.0", "lightweight-charts": "^3.3.0", "ms": "^2.1.3", "numbro": "^2.3.2", "numeral": "^2.0.6", "react-hot-keys": "^2.7.2", "react-hotkeys": "^2.0.0", "recharts": "^2.0.9", "ua-parser-js": "^1.0.36", "uifx": "^2.0.7", "yarn-deduplicate": "^6.0.2" } } ================================================ FILE: public/451.html ================================================ Unavailable For Legal Reasons

Unavailable For Legal Reasons

================================================ FILE: public/index.html ================================================ Uniswap Info
================================================ FILE: public/locales/de.json ================================================ { "noWallet": "Keine Ethereum-Wallet gefunden", "wrongNetwork": "Du bist auf dem falschen Netzwerk.", "switchNetwork": "Bitte wechsle zum {{ correctNetwork }}", "installWeb3MobileBrowser": "Bitte besuche uns mit einem web3-fähigen mobilen Browser wie z.B. Trust Wallet oder Coinbase Wallet.", "installMetamask": "Bitte besuch uns erneut, nachdem du Metamask oder Brave installiert hast.", "disconnected": "Nicht verbunden", "swap": "Tauschen", "swapAnyway": "Trotzdem tauschen", "send": "Senden", "sendAnyway": "Trotzdem senden", "pool": "Pool", "betaWarning": "Dieses Projekt ist in beta. Nutzung auf eigenes Risiko.", "input": "Input", "output": "Output", "estimated": "geschätzt", "balance": "Guthaben: {{ balanceInput }}", "unlock": "Freischalten", "pending": "hängige", "selectToken": "Token auswählen", "searchOrPaste": "Token Name, Symbol oder Adresse suchen", "searchOrPasteMobile": "Name, Symbol oder Adresse", "noExchange": "Exchange nicht gefunden", "exchangeRate": "Wechselkurs", "invertedRate": "Invertierter Wechselkurs", "unknownError": "Oops! Ein unbekannter Fehler ist aufgetreten. Bitte Seite neu laden oder uns von einem anderen Browser oder Gerät erneut besuchen.", "enterValueCont": "Wert {{ missingCurrencyValue }} eingeben um fortzufahren.", "selectTokenCont": "Token auswählen um fortzufahren.", "noLiquidity": "Keine Liquidität.", "insufficientLiquidity": "Liquidität ungenügend.", "unlockTokenCont": "Token freischalten um fortzufahren.", "transactionDetails": "Details der Transaktion", "hideDetails": "Details ausblenden", "slippageWarning": "Wechselkursrutsch", "highSlippageWarning": "Hoher Wechselkursrutsch", "youAreSelling": "Du verkaufst", "orTransFail": "oder die Transaktion wird fehlschlagen.", "youWillReceive": "Du erhältst mindestens", "youAreBuying": "Du kaufst", "itWillCost": "Es kostet höchstens", "forAtMost": "für maximal", "insufficientBalance": "Guthaben ungenügend", "inputNotValid": "Eingabewert ungültig", "differentToken": "Es müssen unterschiedliche Token sein.", "noRecipient": "Empfängeradresse angeben.", "invalidRecipient": "Bitte gib eine gültige Empfängeradresse an.", "recipientAddress": "Adresse des Empfängers", "youAreSending": "Du schickst", "willReceive": "erhält mindestens", "to": "zu", "addLiquidity": "Liquidität hinzufügen", "deposit": "Depot", "currentPoolSize": "Aktuelle Größe des Pools", "yourPoolShare": "Dein Anteil am Pool", "noZero": "Wert darf nicht Null sein.", "mustBeETH": "Einer der Inputs muß ETH sein.", "enterCurrencyOrLabelCont": "{{ inputCurrency }} oder {{ label }} Wert eingeben um fortzufahren.", "youAreAdding": "Du fügst zwischen", "and": "und", "intoPool": "in den Liquiditätspool.", "outPool": "vom Liquiditätspool.", "youWillMint": "Du prägst", "liquidityTokens": "Liquiditätstokens.", "totalSupplyIs": "Die gesamte Anzahl Liquiditätstokens ist aktuell", "youAreSettingExRate": "Du setzt den anfänglichen Wechselkurs auf", "totalSupplyIs0": "Die gesamte Anzahl Liquiditätstokens ist aktuell 0.", "tokenWorth": "Zum gegenwärtigen Wechselkurs ist jeder Pool Token so viel Wert", "firstLiquidity": "Du bist die erste Person die Liquidität bereitstellt!", "initialExchangeRate": "Der initiale Wechselkurs wird auf deiner Überweisung basieren. Stelle sicher, dass deine ETH und {{ label }} denselben Fiatwert haben.", "removeLiquidity": "Liquidität entfernen", "poolTokens": "Pool Tokens", "enterLabelCont": "{{ label }} Wert eingeben um fortzufahren.", "youAreRemoving": "Du entfernst zwischen", "youWillRemove": "Du entfernst", "createExchange": "Exchange erstellen", "invalidTokenAddress": "Ungültige Tokenadresse", "exchangeExists": "{{ label }} Exchange existiert bereits!", "invalidSymbol": "Symbol ungültig", "invalidDecimals": "Dezimalstellen ungültig", "tokenAddress": "Tokenadresse", "label": "Label", "name": "Name", "symbol": "Symbol", "decimals": "Dezimalstellen", "enterTokenCont": "Tokenadresse eingeben um fortzufahren", "priceChange": "Geschätzter Wechselkursrutsch", "forAtLeast": "für mindestens ", "brokenToken": "Der ausgewählte Token ist nicht kompatibel mit Uniswap V1. Liquidität hinzufügen wird zu nicht mehr zugänglichen Token führen!" } ================================================ FILE: public/locales/en.json ================================================ { "noWallet": "No Ethereum wallet found", "wrongNetwork": "You are on the wrong network", "switchNetwork": "Please switch to {{ correctNetwork }}", "installWeb3MobileBrowser": "Please visit us from a web3-enabled mobile browser such as Trust Wallet or Coinbase Wallet.", "installMetamask": "Please visit us after installing Metamask on Chrome or Brave.", "disconnected": "Disconnected", "swap": "Swap", "swapAnyway": "Swap Anyway", "send": "Send", "sendAnyway": "Send Anyway", "pool": "Pool", "betaWarning": "This project is in beta. Use at your own risk.", "input": "Input", "output": "Output", "estimated": "estimated", "balance": "Balance: {{ balanceInput }}", "unlock": "Unlock", "pending": "Pending", "selectToken": "Select a token", "searchOrPaste": "Search Token Name, Symbol, or Address", "searchOrPasteMobile": "Name, Symbol, or Address", "noExchange": "No Exchange Found", "noToken": "No Token Found", "exchangeRate": "Exchange Rate", "unknownError": "Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.", "enterValueCont": "Enter a {{ missingCurrencyValue }} value to continue.", "selectTokenCont": "Select a token to continue.", "noLiquidity": "No liquidity.", "insufficientLiquidity": "Insufficient liquidity.", "unlockTokenCont": "Please unlock token to continue.", "transactionDetails": "Advanced Details", "hideDetails": "Hide Details", "slippageWarning": "Slippage Warning", "highSlippageWarning": "High Slippage Warning", "youAreSelling": "You are selling", "orTransFail": "or the transaction will fail.", "youWillReceive": "You will receive at least", "youAreBuying": "You are buying", "itWillCost": "It will cost at most", "forAtMost": "for at most", "insufficientBalance": "Insufficient Balance", "inputNotValid": "Not a valid input value", "differentToken": "Must be different token.", "noRecipient": "Enter a wallet address to send to.", "invalidRecipient": "Please enter a valid wallet address recipient.", "recipientAddress": "Recipient Address", "youAreSending": "You are sending", "willReceive": "will receive at least", "to": "to", "addLiquidity": "Add Liquidity", "deposit": "Deposit", "currentPoolSize": "Current Pool Size", "yourPoolShare": "Your Pool Share", "noZero": "Amount cannot be zero.", "mustBeETH": "One of the input must be ETH.", "enterCurrencyOrLabelCont": "Enter a {{ inputCurrency }} or {{ label }} value to continue.", "youAreAdding": "You are adding", "and": "and", "intoPool": "into the liquidity pool.", "outPool": "from the liquidity pool.", "youWillMint": "You will mint", "liquidityTokens": "liquidity tokens.", "totalSupplyIs": "Current total supply of liquidity tokens is", "youAreSettingExRate": "You are setting the initial exchange rate to", "totalSupplyIs0": "Current total supply of liquidity tokens is 0.", "tokenWorth": "At current exchange rate, each pool token is worth", "firstLiquidity": "You are the first person to add liquidity!", "initialExchangeRate": "The initial exchange rate will be set based on your deposits. Please make sure that your ETH and {{ label }} deposits have the same fiat value.", "removeLiquidity": "Remove Liquidity", "poolTokens": "Pool Tokens", "enterLabelCont": "Enter a {{ label }} value to continue.", "youAreRemoving": "You are removing between", "youWillRemove": "You will remove", "createExchange": "Create Exchange", "invalidTokenAddress": "Not a valid token address", "exchangeExists": "{{ label }} Exchange already exists!", "invalidSymbol": "Invalid symbol", "invalidDecimals": "Invalid decimals", "tokenAddress": "Token Address", "label": "Label", "name": "Name", "symbol": "Symbol", "decimals": "Decimals", "enterTokenCont": "Enter a token address to continue", "priceChange": "Expected price slippage", "forAtLeast": "for at least ", "brokenToken": "The selected token is not compatible with Uniswap V1. Adding liquidity will result in locked funds.", "toleranceExplanation": "Lowering this limit decreases your risk of frontrunning. However, this makes more likely that your transaction will fail due to normal price movements.", "tokenSearchPlaceholder": "Search name or paste address", "selectFee": "Select Fee", "fee": "fee", "setLimits": "Set Limits", "percent": "Percent", "rate": "Rate", "currentRate": "Current {{label}} Rate:", "inactiveRangeWarning": "Your position will not be active or earn fees until the selected rates come into range.", "invalidRangeWarning": "Invalid Range", "connectWallet": "Connect Wallet", "unsupportedAsset": "Unsupported Asset", "feePool": "Fee Pool", "rebalanceMessage": "Your underlying tokens will be automatically rebalanced when the rate of the pool changes and may be different when you withdraw the position.", "addEarnHelper": "You will earn fees from trades proportional to your share of the pool.", "learnMoreAboutFess": " Learn more about earning fees." } ================================================ FILE: public/locales/es-AR.json ================================================ { "noWallet": "No se encontró billetera de Ethereum", "wrongNetwork": "Te encontrás en la red equivocada", "switchNetwork": "Por favor cambia a {{ correctNetwork }}", "installWeb3MobileBrowser": "Por favor ingresá desde un navegador móvil con web3 habilitado como Trust Wallet o Coinbase Wallet.", "installMetamask": "Por favor visítanos nuevamente luego de instalar Metamask en Chrome o Brave.", "disconnected": "Desconectado", "swap": "Intercambiar", "send": "Enviar", "pool": "Pool", "betaWarning": "Este proyecto se encuentra en beta. Usalo bajo tu propio riesgo.", "input": "Entrada", "output": "Salida", "estimated": "estimado", "balance": "Saldo: {{ balanceInput }}", "unlock": "Desbloquear", "pending": "Pendiente", "selectToken": "Seleccioná un token", "searchOrPaste": "Buscar Token o Pegar Dirección", "noExchange": "No se encontró la divisa", "exchangeRate": "Tasa de Cambio", "enterValueCont": "Ingresá un valor en {{ missingCurrencyValue }} para continuar.", "selectTokenCont": "Seleccioná un token para continuar.", "noLiquidity": "Sin liquidez.", "unlockTokenCont": "Por favor desbloqueá un token para continuar.", "transactionDetails": "Detalles de la transacción", "hideDetails": "Ocultar detalles", "youAreSelling": "Estás vendiendo", "orTransFail": "o la transacción fallará.", "youWillReceive": "Vas a recibir al menos", "youAreBuying": "Estás comprando", "itWillCost": "Costará a lo sumo", "insufficientBalance": "Saldo insuficiente", "inputNotValid": "No es un valor de entrada válido", "differentToken": "Debe ser un token distinto.", "noRecipient": "Ingresá una dirección de billetera para enviar.", "invalidRecipient": "Por favor ingrese una billetera de destino válida.", "recipientAddress": "Dirección del recipiente", "youAreSending": "Estás enviando", "willReceive": "recibirá al menos", "to": "a", "addLiquidity": "Agregar liquidez", "deposit": "Depositar", "currentPoolSize": "Tamaño del Pool Actual", "yourPoolShare": "Tu parte del Pool", "noZero": "El monto no puede ser cero.", "mustBeETH": "Una de las entradas debe ser ETH.", "enterCurrencyOrLabelCont": "Ingresá un valor de {{ inputCurrency }} o de {{ label }} para continuar.", "youAreAdding": "Estás agregando entre", "and": "y", "intoPool": "en el pool de liquidez.", "outPool": "en el pool de liquidez.", "youWillMint": "Vas a acuñar", "liquidityTokens": "tokens de liquidez.", "totalSupplyIs": "El actual suministro total de tokens de liquidez es", "youAreSettingExRate": "Está configurando el tipo de cambio inicial a", "totalSupplyIs0": "El actual suministro total de tokens de liquidez es 0.", "tokenWorth": "Al tipo de cambio actual, cada token del pool vale", "firstLiquidity": "Sos la primer persona en agregar liquidez!", "initialExchangeRate": "El tipo de cambio inicial se establecerá en función de tus depósitos. Por favor, asegúrate de que tus depósitos en ETH y {{ label }} tengan el mismo valor fíat.", "removeLiquidity": "Remover Liquidez", "poolTokens": "Pool de Tokens", "enterLabelCont": "Ingresá un valor de {{ label }} para continuar.", "youAreRemoving": "Estás quitando entre", "youWillRemove": "Vas a remover", "createExchange": "Crear divisa", "invalidTokenAddress": "No es una dirección de token válida", "exchangeExists": "La divisa {{ label }} ya existe!", "invalidSymbol": "Símbolo inválido", "invalidDecimals": "Decimales inválidos", "tokenAddress": "Dirección de Token", "label": "Etiqueta", "decimals": "Decimales", "enterTokenCont": "Ingresá una dirección de token para continuar" } ================================================ FILE: public/locales/es-US.json ================================================ { "noWallet": "No se ha encontrado billetera de Ethereum", "wrongNetwork": "Se encuentra en la red equivocada", "switchNetwork": "Por favor cambie a {{ correctNetwork }}", "installWeb3MobileBrowser": "Por favor ingrese desde un navegador móvil con web3 habilitado como Trust Wallet o Coinbase Wallet.", "installMetamask": "Por favor visítenos nuevamente luego de instalar Metamask en Chrome o Brave.", "disconnected": "Desconectado", "swap": "Intercambiar", "send": "Enviar", "pool": "Pool", "betaWarning": "Este proyecto se encuentra en beta. Úselo bajo tu propio riesgo.", "input": "Entrada", "output": "Salida", "estimated": "estimado", "balance": "Saldo: {{ balanceInput }}", "unlock": "Desbloquear", "pending": "Pendiente", "selectToken": "Seleccione un token", "searchOrPaste": "Buscar Token o Pegar Dirección", "noExchange": "No se ha encontrado la divisa", "exchangeRate": "Tasa de Cambio", "enterValueCont": "Ingrese un valor en {{ missingCurrencyValue }} para continuar.", "selectTokenCont": "Seleccione un token para continuar.", "noLiquidity": "Sin liquidez.", "unlockTokenCont": "Por favor desbloquea un token para continuar.", "transactionDetails": "Detalles de la transacción", "hideDetails": "Ocultar detalles", "youAreSelling": "Está vendiendo", "orTransFail": "o la transacción fallará.", "youWillReceive": "Va a recibir al menos", "youAreBuying": "Está comprando", "itWillCost": "Costará a lo sumo", "insufficientBalance": "Saldo insuficiente", "inputNotValid": "No es un valor de entrada válido", "differentToken": "Debe ser un token distinto.", "noRecipient": "Ingrese una dirección de billetera para enviar.", "invalidRecipient": "Por favor ingrese una billetera de destino válida.", "recipientAddress": "Dirección del recipiente", "youAreSending": "Está enviando", "willReceive": "recibirá al menos", "to": "a", "addLiquidity": "Agregar liquidez", "deposit": "Depositar", "currentPoolSize": "Tamaño del Pool Actual", "yourPoolShare": "Su parte del Pool", "noZero": "El monto no puede ser cero.", "mustBeETH": "Una de las entradas debe ser ETH.", "enterCurrencyOrLabelCont": "Ingrese un valor de {{ inputCurrency }} o de {{ label }} para continuar.", "youAreAdding": "Está agregando entre", "and": "y", "intoPool": "en el pool de liquidez.", "outPool": "en el pool de liquidez.", "youWillMint": "Va a acuñar", "liquidityTokens": "tokens de liquidez.", "totalSupplyIs": "El actual suministro total de tokens de liquidez es", "youAreSettingExRate": "Está configurando el tipo de cambio inicial a", "totalSupplyIs0": "El actual suministro total de tokens de liquidez es 0.", "tokenWorth": "Al tipo de cambio actual, cada token del pool vale", "firstLiquidity": "Es la primer persona en agregar liquidez!", "initialExchangeRate": "El tipo de cambio inicial se establecerá en función de sus depósitos. Por favor, asegúrese de que sus depósitos en ETH y {{ label }} tengan el mismo valor fíat.", "removeLiquidity": "Remover Liquidez", "poolTokens": "Pool de Tokens", "enterLabelCont": "Ingresa un valor de {{ label }} para continuar.", "youAreRemoving": "Está quitando entre", "youWillRemove": "Va a remover", "createExchange": "Crear tipo de cambio", "invalidTokenAddress": "No es una dirección de token válida", "exchangeExists": "El tipo de cambio {{ label }} ya existe!", "invalidSymbol": "Símbolo inválido", "invalidDecimals": "Decimales inválidos", "tokenAddress": "Dirección de Token", "label": "Etiqueta", "decimals": "Decimales", "enterTokenCont": "Ingrese una dirección de token para continuar" } ================================================ FILE: public/locales/it-IT.json ================================================ { "noWallet": "Wallet Ethereum non trovato", "wrongNetwork": "Sei connesso alla rete sbagliata", "switchNetwork": "Perfavore connettiti su {{ correctNetwork }}", "installWeb3MobileBrowser": "Perfavore visita il sito da un browser abilitato web3 o da un app mobile come Trust Wallet o Coinbase Wallet.", "installMetamask": "Perfavore ritorna dopo aver installato Metamask su Chrome o Brave.", "disconnected": "Disconnesso", "swap": "Scambia", "swapAnyway": "Scambia comunque", "send": "Invia", "sendAnyway": "Invia comunque", "pool": "Riserva", "betaWarning": "Questo progetto è in beta. Usalo a tuo rischio.", "input": "Input", "output": "Output", "estimated": "stimato", "balance": "Saldo: {{ balanceInput }}", "unlock": "Sblocca", "pending": "In attesa", "selectToken": "Seleziona un token", "searchOrPaste": "Cerca Nome, Simbolo o Indirizzo Token", "searchOrPasteMobile": "Nome, Simbolo, o Indirizzo", "noExchange": "Nessun Exchange Trovato", "exchangeRate": "Tasso di cambio", "unknownError": "Oops! Si è verificato un Errore imprevisto. Aggiorna la pagina o visita da un altro browser o dispositivo.", "enterValueCont": "Inserisci un valore {{ missingCurrencyValue }} per continuare.", "selectTokenCont": "Seleziona un token per continuare.", "noLiquidity": "Nessuna liquidità.", "insufficientLiquidity": "Liquidità insufficiente.", "unlockTokenCont": "Si prega di sbloccare il token per continuare.", "transactionDetails": "Dettagli avanzati", "hideDetails": "Nascondi dettagli", "slippageWarning": "Avviso di scostamento", "highSlippageWarning": "Avviso di elevato scostamento", "youAreSelling": "Stai vendendo", "orTransFail": "o la transazione fallità.", "youWillReceive": "Riceverai almeno", "youAreBuying": "Stai comprando", "itWillCost": "Costerà al massimo", "forAtMost": "per al massimo", "insufficientBalance": "Saldo insufficente", "inputNotValid": "Non è un valore di input valido", "differentToken": "Deve essere un token diverso.", "noRecipient": "Inserisci un indirizzo di wallet a cui inviare.", "invalidRecipient": "Inserisci un destinatario valido per l'indirizzo del wallet.", "recipientAddress": "Indirizzo del destinatario", "youAreSending": "Stai inviando", "willReceive": "riceverà almeno", "to": "a", "addLiquidity": "Aggiungi liquidità", "deposit": "Depositare", "currentPoolSize": "Dimensione attuale del pool", "yourPoolShare": "La tua parte di pool condivisa", "noZero": "L'importo non può essere zero.", "mustBeETH": "Uno degli input deve essere ETH.", "enterCurrencyOrLabelCont": "Inserisci un valore {{ inputCurrency }} o {{ label }} per continuare.", "youAreAdding": "Stai agginugendo", "and": "e", "intoPool": "nella riserva di liquidità.", "outPool": "dalla riserva di liquidità.", "youWillMint": "Tu conierai", "liquidityTokens": "token di liquidità.", "totalSupplyIs": "L'attuale disponibilità totale di token di liquidità è", "youAreSettingExRate": "Stai impostando il tasso di cambio iniziale su", "totalSupplyIs0": "L'attuale disponibilità totale di token di liquidità è 0.", "tokenWorth": "Al tasso di cambio corrente, ogni token del pool vale", "firstLiquidity": "Sei la prima persona ad aggiungere liquidità!", "initialExchangeRate": "Il tasso di cambio iniziale verrà impostato in base ai tuoi depositi. Assicurati che i tuoi depositi ETH e {{ label }} abbiano lo stesso valore fiat.", "removeLiquidity": "Rimuovi Liquidità", "poolTokens": "Token Pool", "enterLabelCont": "Inserisci un valore {{ label }} per continuare.", "youAreRemoving": "Stai rimuovendo tra", "youWillRemove": "Rimuoverai", "createExchange": "Crea scambio", "invalidTokenAddress": "Indirizzo token non valido", "exchangeExists": "{{ label }} Exchange già esistente!", "invalidSymbol": "Simbolo non valido", "invalidDecimals": "Decimali non validi", "tokenAddress": "Indirizzo Token", "label": "Etichetta", "name": "Nome", "symbol": "Simbolo", "decimals": "Decimali", "enterTokenCont": "Inserire un indirizzo token per continuare", "priceChange": "Scostamento del prezzo previsto", "forAtLeast": "per almeno " } ================================================ FILE: public/locales/iw.json ================================================ { "noWallet": "לא נמצא ארנק", "wrongNetwork": "נבחרה רשת לא נכונה", "switchNetwork": "{{ correctNetwork }} יש צורך לשנות את הרשת ל", "installWeb3MobileBrowser": "יש צורך בארנק ווב3.0, תתקין מטאמאסק או ארנק דומה", "installMetamask": " Metamask יש צורך להתקין תוסף מטאמאסק לדפדפן, חפשו בגוגל ", "disconnected": "מנותק", "swap": "המרה", "send": "שליחה", "pool": "להפקיד", "betaWarning": "הפרויקט נמצא בשלב בטא, השתמשו באחריות", "input": "מוכר", "output": "אקבל", "estimated": "הערכה", "balance": "בארנק שלי {{ balanceInput }}", "unlock": "שחרור נעילת ארנק", "pending": "ממתין לאישור", "selectToken": "בחרו את הטוקן להמרה", "searchOrPaste": "הכניסו שם או כתובת של טוקן לחיפוש", "noExchange": "לא מתאפשרת המרה", "exchangeRate": "שער המרה", "enterValueCont": "כדי להמשיך {{ missingCurrencyValue }} הזינו ", "selectTokenCont": "בחרו טוקן כדי להמשיך", "noLiquidity": "אין נזילות", "unlockTokenCont": "יש צורך לאשר את הטוקן למסחר", "transactionDetails": "פרטי הטרנזקציה", "hideDetails": "הסתר פרטים נוספים", "youAreSelling": "למכירה", "orTransFail": "או שהטרנזקציה תיכשל", "youWillReceive": "תוצר המרה מינימלי", "youAreBuying": "קונה", "itWillCost": "זה יעלה", "insufficientBalance": "אין בחשבון מספיק מטבעות", "inputNotValid": "קלט לא תקין", "differentToken": "יש צורך בטוקנים שונים", "noRecipient": "לא הוכנסה כתובת ארנק יעד", "invalidRecipient": "לא הוכנסה כתובת תקינה", "recipientAddress": "כתובת יעד", "youAreSending": "כמות לשליחה", "willReceive": "יתקבל לכל הפחות", "to": "אל", "addLiquidity": "להוספת נזילות למאגר", "deposit": "הפקדה", "currentPoolSize": "גודל מאגר הנזילות הכולל", "yourPoolShare": "חלקך במאגר הנזילות", "noZero": "אפס אינו ערך תקין", "mustBeETH": "ETH חייב להופיע באחד מהצדדים", "enterCurrencyOrLabelCont": "כדי להמשיך {{ inputCurrency }} או {{ label }} הכנס", "youAreAdding": "מתווספים למאגר", "and": "וגם", "intoPool": "לתוך הנזילות", "outPool": "מתוך", "youWillMint": "יונפקו לכם", "liquidityTokens": "טוקנים של נזילות", "totalSupplyIs": "חלקך במאגר הנזילות", "youAreSettingExRate": "שער ההמרה יקבע על ידך", "totalSupplyIs0": "אין לך טוקנים של נזילות", "tokenWorth": "שווי כל טוקן נזילות הינו", "firstLiquidity": "אתה הראשוןה שמזרים נזילות למאגר", "initialExchangeRate": "ושל האית'ר הינן בערך שווה {{ label }} תוודאו שההפקדה של הטוקן", "removeLiquidity": "הוצאה של נזילות", "poolTokens": "טוקנים של מאגר הנזילות", "enterLabelCont": "כדי להמשיך {{ label }} הכנס ", "youAreRemoving": "יוסרו", "youWillRemove": "יוסרו", "createExchange": "ליצירת זוג מסחר", "invalidTokenAddress": "כתובת טוקן לא נכונה", "exchangeExists": "{{ label }} כבר קיים זוג המרה עבור", "invalidSymbol": "תו שגוי", "invalidDecimals": "ספרות עשרוניות שגויות", "tokenAddress": "כתובת הטוקן", "label": "שם", "decimals": "ספרות עשרויות", "enterTokenCont": "הכניסו כתובת טוקן כדי להמשיך" } ================================================ FILE: public/locales/ro.json ================================================ { "noWallet": "Niciun portofel Ethereum găsit", "wrongNetwork": "Nu ești conectat la rețeaua corectă", "switchNetwork": "Conectează-te te rog la {{ correctNetwork }}", "installWeb3MobileBrowser": "Incearcă să vizitezi această pagina folosind un browser precum Trust Wallet sau Coinbase Wallet.", "installMetamask": "Vizitează această pagină din nou după ce instalezi MetaMask în Chrome sau Brave", "disconnected": "Deconectat", "swap": "Schimbă", "swapAnyway": "Schimbă Oricum", "send": "Trimite", "sendAnyway": "Trimite Oricum", "pool": "Depune Lichiditate", "betaWarning": "Proiectul este încă în versiunea beta. Folosește-l cu grijă, riscul este al tău.", "input": "Input", "output": "Output", "estimated": "estimat", "balance": "Balanță: {{ balanceInput }}", "unlock": "Deblochează", "pending": "În Așteptare", "selectToken": "Selectează un jeton", "searchOrPaste": "Caută după Numele, Simbolul sau Adresa Jetonului", "searchOrPasteMobile": "Nume, Simbol sau Adresă", "noExchange": "Nicio Piață de Schimb Găsită", "noToken": "Nicin Jeton Găsit", "exchangeRate": "Curs de Schimb", "unknownError": "Ups! A intervenit o eroare tehnică. Te rog reîncarcă pagina, sau acceseaz-o de pe alt navigator sau dispozitiv.", "enterValueCont": "Setează o valoare pentru {{ missingCurrencyValue }} pentru a continua.", "selectTokenCont": "Selectează un jeton pentru a continua.", "noLiquidity": "Nu Există Lichiditate.", "insufficientLiquidity": "Lichiditate Insuficientă.", "unlockTokenCont": "Te rog deblochează jetonul pentru a continua.", "transactionDetails": "Detalii Avansate", "hideDetails": "Ascunde Detaili", "slippageWarning": "Alertă Deviație de Preț", "highSlippageWarning": "Alertă Deviație de Preț Mare", "youAreSelling": "Tu vinzi", "orTransFail": "sau tranzacția va eșua.", "youWillReceive": "Vei primi cel puțin", "youAreBuying": "Tu cumperi", "itWillCost": "Va costa cel mult", "forAtMost": "pentru maximum", "insufficientBalance": "Balanță Insuficientă", "inputNotValid": "Valoarea setată nu este validă", "differentToken": "Trebuie să fie un jeton diferit.", "noRecipient": "Setează o adresă de portofel pentru destinatar.", "invalidRecipient": "Te rog setează o adresă de portofel validă pentru destinatar.", "recipientAddress": "Adresa Destinatarului", "youAreSending": "Tu trimiți", "willReceive": "vei primi cel puțin", "to": "spre", "addLiquidity": "Adaugă Lichiditate", "deposit": "Depozitează", "currentPoolSize": "Volumul Actual al Fondului", "yourPoolShare": "Partea Ta din Fond", "noZero": "Cantitatea nu poate fi zero.", "mustBeETH": "Una dintre valori trebuie să fie ETH.", "enterCurrencyOrLabelCont": "Setează o valoare pentru {{ inputCurrency }} sau {{ label }} pentru a continua. ", "youAreAdding": "Tu adaugi", "and": "și", "intoPool": "în fondul de lichidatate.", "outPool": "din fondul de lichiditate.", "youWillMint": "Tu vei tipări", "liquidityTokens": "jetoane de lichiditate.", "totalSupplyIs": "Cantitatea totală de jetoane de lichiditate este", "youAreSettingExRate": "Setezi cursul de schimb inițial la", "totalSupplyIs0": "Cantitatea totală de jetoane de lichiditate este 0.", "tokenWorth": "La cursul de schimb actual, fiecare jeton de lichiditate este valorat la", "firstLiquidity": "Ești prima persoană care depune lichiditate!", "initialExchangeRate": "Cursul de schimb inițial va fi setat în funcție de depozitele tale. Te rog asigură-te că ETH-ul și {{ label }}-ul pe care le-ai depozitat au aceeași valoare în bani fiat.", "removeLiquidity": "Retrage Lichiditat", "poolTokens": "Depune Jetoane", "enterLabelCont": "Setează o valoare pentru {{ label }} pentru a continua.", "youAreRemoving": "Retragi între", "youWillRemove": "Vei retrage", "createExchange": "Creează Piață de Schimb", "invalidTokenAddress": "Adresa de jeton nu este validă", "exchangeExists": "{{ label }} Piața de schimb există deja!", "invalidSymbol": "Simbol invalid", "invalidDecimals": "Zecimale invalide", "tokenAddress": "Adresă Jeton", "label": "Denumire", "name": "Nume", "symbol": "Simbol", "decimals": "Zecimale", "enterTokenCont": "Setează o adresă de jeton pentru a continua", "priceChange": "Deviație de preț așteptată", "forAtLeast": "pentru cel puțin ", "brokenToken": "Jetonul selectat nu este compatibil cu Uniswap V1. Depunerea de lichiditate îți va bloca fondurile pe vecie.", "toleranceExplanation": "Micșorând această limită, vei reduce riscul de frontrunning. În același timp, devine mai probabil că tranzacția va eșua din cauza variațiilor normale de preț.", "tokenSearchPlaceholder": "Caută nume sau lipește adresă" } ================================================ FILE: public/locales/ru.json ================================================ { "noWallet": "Кошелек эфира не найден", "wrongNetwork": "Некорректная сеть", "switchNetwork": "Пожалуйста, перейдите в {{ correctNetwork }}", "installWeb3MobileBrowser": "Пожалуйста, откройте в браузере с поддержкой web3, таком, как Trust Wallet или Coinbase Wallet.", "installMetamask": "Пожалуйста, откройте в Chrome или Brave с установленным расширением Metamask.", "disconnected": "Нет подключения", "swap": "Обменять", "send": "Отправить", "pool": "Вложить", "betaWarning": "Проект находится на стадии бета тестирования.", "input": "Ввести", "output": "Вывести", "estimated": "по оценке", "balance": "Баланс: {{ balanceInput }}", "unlock": "Разблокировать", "pending": "Ожидание", "selectToken": "Выберите токен", "searchOrPaste": "Поиск токена или вставить адрес токена", "noExchange": "Обмен не найден", "exchangeRate": "Курс обмена", "enterValueCont": "Введите {{ missingCurrencyValue }}, чтобы продолжить.", "selectTokenCont": "Введите токен, чтобы продолжить.", "noLiquidity": "Нет ликвидности.", "unlockTokenCont": "Пожалуйста, разблокируйте токен, чтобы продолжить.", "transactionDetails": "Детали транзакции", "hideDetails": "Скрыть подробности", "youAreSelling": "Вы продаете", "orTransFail": "или транзакция будет отклонена.", "youWillReceive": "Вы получите как минимум", "youAreBuying": "Вы покупаете", "itWillCost": "В крайнем случае это будет стоить", "insufficientBalance": "Недостаточно средств", "inputNotValid": "Некорректное значение", "differentToken": "Должны быть разные токены.", "noRecipient": "Введите адрес кошелька эфира, куда перечислить.", "invalidRecipient": "Пожалуйста, введите корректный адрес кошелька получателя.", "recipientAddress": "Адрес получателя", "youAreSending": "Вы отправляете", "willReceive": "получит как минимум", "to": "", "addLiquidity": "Добавить ликвидность", "deposit": "Вложить", "currentPoolSize": "Текущий размер пула", "yourPoolShare": "Ваша доля в пуле", "noZero": "Значение не может быть нулевым.", "mustBeETH": "Одно из значений должно быть ETH.", "enterCurrencyOrLabelCont": "Введите {{ inputCurrency }} или {{ label }}, чтобы продолжить.", "youAreAdding": "Вы добавляете от", "and": "и", "intoPool": "в пул ликвидности.", "outPool": "из пула ликвидности.", "youWillMint": "Вы произведёте", "liquidityTokens": "токенов ликвидности.", "totalSupplyIs": "Ваш объем токенов ликвидности", "youAreSettingExRate": "Вы устанавливаете начальный курс обмена", "totalSupplyIs0": "Ваш объем токенов ликвидности 0.", "tokenWorth": "При текущем курсе, каждый токен пула оценивается в", "firstLiquidity": "Вы первый, кто создаст ликвидность!", "initialExchangeRate": "Начальный курс обмена будет установлен согласно вашим депозитам. Убедитесь, что ваши депозиты ETH и {{ label }} имеют одинаковое значение в валюте.", "removeLiquidity": "Убрать ликвидность", "poolTokens": "Токены пула", "enterLabelCont": "Введите {{ label }}, чтобы продолжить.", "youAreRemoving": "Вы убираете в от", "youWillRemove": "Вы уберёте", "createExchange": "Создать обмен", "invalidTokenAddress": "Некорректный адрес токена", "exchangeExists": "{{ label }} Обмен уже существует!", "invalidSymbol": "Некорректный символ", "invalidDecimals": "Некорректное десятичное значение", "tokenAddress": "Адрес токена", "label": "Название", "decimals": "Десятичное значение", "enterTokenCont": "Чтобы продолжить, введите адрес токена" } ================================================ FILE: public/locales/vi.json ================================================ { "noWallet": "Không tìm thấy ví tiền Ethereum", "wrongNetwork": "Kết nối mạng không đúng", "switchNetwork": "Vui lòng chuyển sang {{ correctNetwork }}", "installWeb3MobileBrowser": "Vui lòng truy cập từ trình duyệt di động hỗ trợ web3 như là Ví Trust hoặc Ví Coinbase", "installMetamask": "Vui lòng truy cập sau khi cài đặt Metamask trên Chrome hoặc Brave.", "disconnected": "Ngắt kết nối rồi", "swap": "Hoán đổi", "swapAnyway": "Tiếp tục hoán đổi?", "send": "Gửi", "sendAnyway": "Tiếp tục gửi?", "pool": "Chung vốn", "betaWarning": "Dự án này đang trong giai đoạn thử nghiệm. Sử dụng có rủi ro của riêng bạn", "input": "Đầu vào", "output": "Đầu ra", "estimated": "ước lượng", "balance": "Số dư: {{ balanceInput }}", "unlock": "Mở khóa", "pending": "Đang chờ xử lý", "selectToken": "Chọn một đồng tiền ảo", "searchOrPaste": "Tìm kiếm tên, biểu tượng, hoặc địa chỉ của đồng tiền ảo", "searchOrPasteMobile": "Tên, Biểu tượng, hoặc Địa chỉ", "noExchange": "Không tìm thấy giao dịch", "exchangeRate": "Tỷ giá", "unknownError": "Rất tiếc! Xảy ra lỗi không xác định. Vui lòng làm mới trang, hoặc truy cập từ trình duyệt hay thiết bị khác.", "enterValueCont": "Nhập một giá trị {{ missingCurrencyValue }} để tiếp tục.", "selectTokenCont": "Chọn một đồng tiền ảo để tiếp tục.", "noLiquidity": "Không có tính thanh khoản.", "insufficientLiquidity": "Không đủ tính thanh khoản.", "unlockTokenCont": "Vui lòng mở khoá đồng tiền ảo để tiếp tục", "transactionDetails": "Chi tiết nâng cao", "hideDetails": "Ẩn chi tiết", "slippageWarning": "Cảnh báo trượt giá", "highSlippageWarning": "Cảnh báo trượt giá cao", "youAreSelling": "Bạn đang bán", "orTransFail": "hoặc giao dịch sẽ thất bại.", "youWillReceive": "Bạn sẽ nhận dược ít nhất là", "youAreBuying": "Bạn đang mua", "itWillCost": "Nó sẽ có giá cao nhất", "forAtMost": "nhiều nhất", "insufficientBalance": "Số dư không đủ", "inputNotValid": "Giá trị nhập vào không hợp lệ", "differentToken": "Đồng tiền ảo phải khác nhau.", "noRecipient": "Nhập địa chỉ ví để gửi đến.", "invalidRecipient": "Vui lòng nhập một người nhận địa chỉ ví hợp lệ.", "recipientAddress": "Địa chỉ người nhận", "youAreSending": "Bạn đang gửi", "willReceive": "sẽ nhận dược ít nhất là", "to": "đến", "addLiquidity": "Thêm tiền thanh khoản", "deposit": "Gửi tiền", "currentPoolSize": "Quy mô hiện tại của quỹ", "yourPoolShare": "Phần hùn của bạn trong quỹ", "noZero": "Số tiền không thể bằng không.", "mustBeETH": "Một trong những đầu vào phải là ETH.", "enterCurrencyOrLabelCont": "Nhập giá trị {{ inputCurrency }} hoặc {{ label }} để tiếp tục.", "youAreAdding": "Bạn đang thêm", "and": "và", "intoPool": "vào nhóm thanh khoản.", "outPool": "từ nhóm thanh khoản.", "youWillMint": "Bạn sẽ đúc tiền", "liquidityTokens": "đồng thanh khoản.", "totalSupplyIs": "Tổng cung hiện tại của đồng thanh khoản là", "youAreSettingExRate": "Bạn đang đặt tỷ giá hối đoái ban đầu thành", "totalSupplyIs0": "Tổng cung hiện tại của đồng thanh khoản là 0.", "tokenWorth": "Tại tỷ giá hối đoái hiện tại, giá trị đồng token của quỹ là", "firstLiquidity": "Bạn là người đầu tiên thêm thanh khoản!", "initialExchangeRate": "Tỷ giá hối đoái ban đầu sẽ được thiết lập dựa trên tiền gửi của bạn. Vui lòng đảm bảo rằng tiền gửi ETH và {{ label }} của bạn có cùng giá trị tiền định danh.", "removeLiquidity": "Loại bỏ thanh khoản", "poolTokens": "Đồng tiền ảo của quỹ", "enterLabelCont": "Nhập giá trị {{ label }} để tiếp tục", "youAreRemoving": "Bạn đang loại bỏ giữa", "youWillRemove": "Bạn sẽ loại bỏ", "createExchange": "Tạo giao dịch", "invalidTokenAddress": "Địa chỉ đồng tiền điện tử không hợp lệ", "exchangeExists": "{{ label }} Giao dịch đã tồn tại!", "invalidSymbol": "Biểu tượng không hợp lệ", "invalidDecimals": "Số thập phân không hợp lệ", "tokenAddress": "Địa chỉ đồng tiền điện tử", "label": "Nhãn", "name": "Tên", "symbol": "Biểu tượng", "decimals": "Số thập phân", "enterTokenCont": "Nhập địa chỉ đồng tiền ảo để tiếp tục", "priceChange": "Trượt giá dự kiến", "forAtLeast": "cho ít nhất " } ================================================ FILE: public/locales/zh-CN.json ================================================ { "noWallet": "未发现以太钱包", "wrongNetwork": "网络错误", "switchNetwork": "请切换到 {{ correctNetwork }}", "installWeb3MobileBrowser": "请从支持web3的移动端浏览器,如 Trust Wallet 或 Coinbase Wallet 访问。", "installMetamask": "请从安装了 Metamask 插件的 Chrome 或 Brave 访问。", "disconnected": "未连接", "swap": "兑换", "send": "发送", "pool": "资金池", "betaWarning": "项目尚处于beta阶段。使用需自行承担风险。", "input": "输入", "output": "输出", "estimated": "估计", "balance": "余额: {{ balanceInput }}", "unlock": "解锁", "pending": "处理中", "selectToken": "选择通证", "searchOrPaste": "搜索通证或粘贴地址", "noExchange": "未找到交易所", "exchangeRate": "兑换率", "enterValueCont": "输入{{ missingCurrencyValue }}值并继续。", "selectTokenCont": "选取通证继续。", "noLiquidity": "没有流动金。", "unlockTokenCont": "请解锁通证并继续。", "transactionDetails": "交易明细", "hideDetails": "隐藏明细", "youAreSelling": "你正在出售", "orTransFail": "或交易失败。", "youWillReceive": "你将至少收到", "youAreBuying": "你正在购买", "itWillCost": "它将至少花费", "insufficientBalance": "余额不足", "inputNotValid": "无效的输入值", "differentToken": "必须是不同的通证。", "noRecipient": "输入接收钱包地址。", "invalidRecipient": "请输入有效的收钱地址。", "recipientAddress": "接收地址", "youAreSending": "你正在发送", "willReceive": "将至少收到", "to": "至", "addLiquidity": "添加流动金", "deposit": "存入", "currentPoolSize": "当前资金池大小", "yourPoolShare": "你的资金池份额", "noZero": "金额不能为零。", "mustBeETH": "输入中必须有一个是 ETH。", "enterCurrencyOrLabelCont": "输入 {{ inputCurrency }} 或 {{ label }} 值并继续。", "youAreAdding": "你将添加", "and": "和", "intoPool": "入流动资金池。", "outPool": "出流动资金池。", "youWillMint": "你将铸造", "liquidityTokens": "流动通证。", "totalSupplyIs": "当前流动通证的总量是", "youAreSettingExRate": "你将初始兑换率设置为", "totalSupplyIs0": "当前流动通证的总量是0。", "tokenWorth": "当前兑换率下,每个资金池通证价值", "firstLiquidity": "你是第一个添加流动金的人!", "initialExchangeRate": "初始兑换率将由你的存入情况决定。请确保你存入的 ETH 和 {{ label }} 具有相同的总市值。", "removeLiquidity": "删除流动金", "poolTokens": "资金池通证", "enterLabelCont": "输入 {{ label }} 值并继续。", "youAreRemoving": "你正在移除", "youWillRemove": "你将移除", "createExchange": "创建交易所", "invalidTokenAddress": "通证地址无效", "exchangeExists": "{{ label }} 交易所已存在!", "invalidSymbol": "通证符号无效", "invalidDecimals": "小数位数无效", "tokenAddress": "通证地址", "label": "通证符号", "decimals": "小数位数", "enterTokenCont": "输入通证地址并继续" } ================================================ FILE: public/locales/zh-TW.json ================================================ { "noWallet": "未偵測到以太坊錢包", "wrongNetwork": "你位在錯誤的網路", "switchNetwork": "請切換到 {{ correctNetwork }}", "installWeb3MobileBrowser": "請安裝含有 web3 瀏覽器的手機錢包,如 Trust Wallet 或 Coinbase Wallet。", "installMetamask": "請使用 Chrome 或 Brave 瀏覽器安裝 Metamask。", "disconnected": "未連接", "swap": "兌換", "send": "發送", "pool": "資金池", "betaWarning": "本產品仍在測試階段。使用者需自負風險。", "input": "輸入", "output": "輸出", "estimated": "估計", "balance": "餘額: {{ balanceInput }}", "unlock": "解鎖", "pending": "處理中", "selectToken": "選擇代幣", "searchOrPaste": "選擇代幣或輸入地址", "noExchange": "找不到交易所", "exchangeRate": "匯率", "enterValueCont": "輸入 {{ missingCurrencyValue }} 以繼續。", "selectTokenCont": "選擇代幣以繼續。", "noLiquidity": "沒有流動性資金。", "unlockTokenCont": "解鎖代幣以繼續。", "transactionDetails": "交易明細", "hideDetails": "隱藏明細", "youAreSelling": "你正在出售", "orTransFail": "或交易失敗。", "youWillReceive": "你將至少收到", "youAreBuying": "你正在購買", "itWillCost": "這將花費至多", "insufficientBalance": "餘額不足", "inputNotValid": "無效的輸入值", "differentToken": "必須是不同的代幣。", "noRecipient": "請輸入收款人錢包地址。", "invalidRecipient": "請輸入有效的錢包地址。", "recipientAddress": "收款人錢包地址", "youAreSending": "你正在發送", "willReceive": "將至少收到", "to": "至", "addLiquidity": "增加流動性資金", "deposit": "存入", "currentPoolSize": "目前的資金池總量", "yourPoolShare": "你在資金池中的佔比", "noZero": "金額不能為零。", "mustBeETH": "輸入中必須包含 ETH。", "enterCurrencyOrLabelCont": "輸入 {{ inputCurrency }} 或 {{ label }} 以繼續。", "youAreAdding": "你將把", "and": "和", "intoPool": "加入資金池。", "outPool": "領出資金池。", "youWillMint": "你將產生", "liquidityTokens": "流動性代幣。", "totalSupplyIs": "目前流動性代幣供給總量為", "youAreSettingExRate": "初始的匯率將被設定為", "totalSupplyIs0": "目前流動性代幣供給為零。", "tokenWorth": "依據目前的匯率,每個流動性代幣價值", "firstLiquidity": "您是第一個提供流動性資金的人!", "initialExchangeRate": "初始的匯率將取決於你存入的資金。請確保存入的 ETH 和 {{ label }} 的價值相等。", "removeLiquidity": "領出流動性資金", "poolTokens": "資金池代幣", "enterLabelCont": "輸入 {{ label }} 以繼續。", "youAreRemoving": "您正在移除", "youWillRemove": "您即將移除", "createExchange": "創建交易所", "invalidTokenAddress": "無效的代幣地址", "exchangeExists": "{{ label }} 的交易所已經存在!", "invalidSymbol": "代幣符號錯誤", "invalidDecimals": "小數位數錯誤", "tokenAddress": "代幣地址", "label": "代幣符號", "decimals": "小數位數", "enterTokenCont": "輸入代幣地址" } ================================================ FILE: public/manifest.json ================================================ { "short_name": "Uniswap", "name": "Uniswap", "icons": [ { "src": "./images/192x192_App_Icon.png", "sizes": "192x192", "type": "image/png", "purpose": "any maskable" }, { "src": "./images/512x512_App_Icon.png", "sizes": "512x512", "type": "image/png", "purpose": "any maskable" } ], "orientation": "portrait", "display": "standalone", "theme_color": "#ff007a", "background_color": "#fff" } ================================================ FILE: schema.json ================================================ { "__schema": { "description": null, "queryType": { "name": "Query" }, "mutationType": null, "subscriptionType": { "name": "Subscription" }, "types": [ { "kind": "SCALAR", "name": "BigDecimal", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "BigInt", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Block_height", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "hash", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "number", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "Int", "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Bundle", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "ID", "description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.", "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Bundle_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Bundle_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ethPriceUSD", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Burn", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Transaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Burn_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "String", "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Burn_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "SCALAR", "name": "Bytes", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Collect", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Transaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Collect_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Collect_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Factory", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Factory_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Factory_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalVolumeETH", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Flash", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Transaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Flash_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Flash_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0Paid", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1Paid", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Mint", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Transaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Mint_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Mint_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "owner", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickLower", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tickUpper", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "ENUM", "name": "OrderDirection", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "asc", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "desc", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Pool", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Token", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Token", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolHourData", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "PoolHourData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "PoolHourData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PoolHourData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolDayData", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "PoolDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "PoolDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PoolDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mints", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Mint_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Mint_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Mint", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "burns", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Burn_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Burn_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Burn", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "swaps", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Swap_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Swap_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Swap", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collects", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Collect_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Collect_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Collect", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "ticks", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Tick_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Tick_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Tick", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "PoolDayData", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "PoolDayData_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "PoolDayData_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "PoolHourData", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "PoolHourData_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_not", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_gt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_lt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_gte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_lte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "PoolHourData_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Pool_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Pool_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "feeTier", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidity", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPrice", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token0Price", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token1Price", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "observationIndex", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedETH", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolHourData", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolDayData", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "mints", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "burns", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "swaps", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collects", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "ticks", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Query", "description": null, "specifiedByUrl": null, "fields": [ { "name": "factory", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Factory", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "factories", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Factory_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Factory_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Factory", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bundle", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Bundle", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "bundles", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Bundle_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Bundle_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Bundle", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Token", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tokens", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Token_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Token_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Token", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Pool", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pools", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Pool_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Pool_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Tick", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "ticks", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Tick_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Tick_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Tick", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Transaction", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "transactions", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Transaction_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Transaction_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Transaction", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mint", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Mint", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mints", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Mint_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Mint_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Mint", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "burn", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Burn", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "burns", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Burn_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Burn_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Burn", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "swap", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Swap", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "swaps", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Swap_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Swap_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Swap", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collect", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Collect", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "collects", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Collect_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Collect_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Collect", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "flash", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Flash", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "flashes", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Flash_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Flash_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Flash", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "uniswapDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "UniswapDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "uniswapDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "UniswapDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "UniswapDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UniswapDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolHourData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "PoolHourData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolHourDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "PoolHourData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "PoolHourData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PoolHourData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "PoolDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "PoolDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "PoolDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PoolDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickHourData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "TickHourData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickHourDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "TickHourData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "TickHourData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TickHourData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "TickDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "TickDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "TickDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TickDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tokenDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "TokenDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tokenDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "TokenDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "TokenDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TokenDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "_meta", "description": "Access to subgraph metadata", "args": [ { "name": "block", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "_Meta_", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Subscription", "description": null, "specifiedByUrl": null, "fields": [ { "name": "factory", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Factory", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "factories", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Factory_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Factory_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Factory", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "bundle", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Bundle", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "bundles", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Bundle_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Bundle_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Bundle", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Token", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tokens", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Token_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Token_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Token", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Pool", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "pools", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Pool_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Pool_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Tick", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "ticks", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Tick_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Tick_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Tick", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Transaction", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "transactions", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Transaction_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Transaction_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Transaction", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mint", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Mint", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "mints", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Mint_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Mint_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Mint", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "burn", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Burn", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "burns", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Burn_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Burn_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Burn", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "swap", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Swap", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "swaps", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Swap_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Swap_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Swap", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collect", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Collect", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "collects", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Collect_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Collect_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Collect", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "flash", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "Flash", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "flashes", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Flash_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Flash_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Flash", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "uniswapDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "UniswapDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "uniswapDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "UniswapDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "UniswapDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "UniswapDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolHourData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "PoolHourData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolHourDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "PoolHourData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "PoolHourData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PoolHourData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "PoolDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "PoolDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "PoolDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "PoolDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickHourData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "TickHourData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickHourDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "TickHourData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "TickHourData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TickHourData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "TickDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tickDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "TickDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "TickDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TickDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tokenDayData", "description": null, "args": [ { "name": "id", "description": null, "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "TokenDayData", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "tokenDayDatas", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "TokenDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "TokenDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "block", "description": "The block at which the query should be executed. Can either be an `{ number: Int }` containing the block number or a `{ hash: Bytes }` value containing a block hash. Defaults to the latest block when omitted.", "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TokenDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "_meta", "description": "Access to subgraph metadata", "args": [ { "name": "block", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Block_height", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "OBJECT", "name": "_Meta_", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "Swap", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Transaction", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Swap_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Bytes", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Swap_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "transaction", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sender", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "recipient", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "origin", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amount1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "amountUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "sqrtPriceX96", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "logIndex", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Tick", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "price0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "price1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TickDayData", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Tick", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "TickDayData_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TickDayData_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "TickHourData", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Tick", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "TickHourData_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_not", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_gt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_lt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_gte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_lte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TickHourData_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "periodStartUnix", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tick", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Tick_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Tick_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "pool", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityGross", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityNet", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "price1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken0", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesToken1", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collectedFeesUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtTimestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "createdAtBlockNumber", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "liquidityProviderCount", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Token", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volume", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "whitelistPools", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Pool_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Pool_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Pool", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tokenDayData", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "TokenDayData_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "TokenDayData_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "TokenDayData", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "TokenDayData", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "token", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "Token", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volume", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "TokenDayData_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "TokenDayData_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "token", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "priceUSD", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Token_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_not", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_gt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_lt", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_gte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_lte", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_not_contains", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_not_starts_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name_not_ends_with", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "whitelistPools", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "whitelistPools_not", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "whitelistPools_contains", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "whitelistPools_not_contains", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Token_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "symbol", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "decimals", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalSupply", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volume", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "untrackedVolumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "poolCount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLocked", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "totalValueLockedUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "derivedETH", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "whitelistPools", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tokenDayData", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "Transaction", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mints", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Mint_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Mint_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Mint", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "burns", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Burn_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Burn_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Burn", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "swaps", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Swap_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Swap_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Swap", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "flashed", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Flash_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Flash_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Flash", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "collects", "description": null, "args": [ { "name": "skip", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "0", "isDeprecated": false, "deprecationReason": null }, { "name": "first", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": "100", "isDeprecated": false, "deprecationReason": null }, { "name": "orderBy", "description": null, "type": { "kind": "ENUM", "name": "Collect_orderBy", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "orderDirection", "description": null, "type": { "kind": "ENUM", "name": "OrderDirection", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "where", "description": null, "type": { "kind": "INPUT_OBJECT", "name": "Collect_filter", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", "name": "Collect", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "Transaction_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "Transaction_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "blockNumber", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "timestamp", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "mints", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "burns", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "swaps", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "flashed", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "collects", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "UniswapDayData", "description": null, "specifiedByUrl": null, "fields": [ { "name": "id", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "INPUT_OBJECT", "name": "UniswapDayData_filter", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lt", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_gte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_lte", "description": null, "type": { "kind": "SCALAR", "name": "ID", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "id_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "ID", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lt", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_gte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_lte", "description": null, "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigInt", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigInt", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_not", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_gt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_lt", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_gte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_lte", "description": null, "type": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD_not_in", "description": null, "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "BigDecimal", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "UniswapDayData_orderBy", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "id", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "date", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeETH", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSD", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "volumeUSDUntracked", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "txCount", "description": null, "isDeprecated": false, "deprecationReason": null }, { "name": "tvlUSD", "description": null, "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "_Block_", "description": null, "specifiedByUrl": null, "fields": [ { "name": "hash", "description": "The hash of the block", "args": [], "type": { "kind": "SCALAR", "name": "Bytes", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "number", "description": "The block number", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "_Meta_", "description": "The type for the top-level _meta field", "specifiedByUrl": null, "fields": [ { "name": "block", "description": "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "_Block_", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "deployment", "description": "The deployment ID", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "hasIndexingErrors", "description": "If `true`, the subgraph encountered indexing errors at some past block", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "SCALAR", "name": "Boolean", "description": "The `Boolean` scalar type represents `true` or `false`.", "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "_SubgraphErrorPolicy_", "description": null, "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "allow", "description": "Data will be returned even if the subgraph has indexing errors", "isDeprecated": false, "deprecationReason": null }, { "name": "deny", "description": "If the subgraph has indexing errors, data will be omitted. The default.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "__Schema", "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", "specifiedByUrl": null, "fields": [ { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "types", "description": "A list of all types supported by this server.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "queryType", "description": "The type that query operations will be rooted at.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "mutationType", "description": "If this server supports mutation, the type that mutation operations will be rooted at.", "args": [], "type": { "kind": "OBJECT", "name": "__Type", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "subscriptionType", "description": "If this server support subscription, the type that subscription operations will be rooted at.", "args": [], "type": { "kind": "OBJECT", "name": "__Type", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "directives", "description": "A list of all directives supported by this server.", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Directive", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__Type", "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByUrl`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", "specifiedByUrl": null, "fields": [ { "name": "kind", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "__TypeKind", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "name", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "specifiedByUrl", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "fields", "description": null, "args": [ { "name": "includeDeprecated", "description": null, "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false", "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Field", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "interfaces", "description": null, "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "possibleTypes", "description": null, "args": [], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "enumValues", "description": null, "args": [ { "name": "includeDeprecated", "description": null, "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false", "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__EnumValue", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "inputFields", "description": null, "args": [ { "name": "includeDeprecated", "description": null, "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false", "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "ofType", "description": null, "args": [], "type": { "kind": "OBJECT", "name": "__Type", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "__TypeKind", "description": "An enum describing what kind of type a given `__Type` is.", "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "SCALAR", "description": "Indicates this type is a scalar.", "isDeprecated": false, "deprecationReason": null }, { "name": "OBJECT", "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", "isDeprecated": false, "deprecationReason": null }, { "name": "INTERFACE", "description": "Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNION", "description": "Indicates this type is a union. `possibleTypes` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "ENUM", "description": "Indicates this type is an enum. `enumValues` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "INPUT_OBJECT", "description": "Indicates this type is an input object. `inputFields` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "LIST", "description": "Indicates this type is a list. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null }, { "name": "NON_NULL", "description": "Indicates this type is a non-null. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null }, { "kind": "OBJECT", "name": "__Field", "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", "specifiedByUrl": null, "fields": [ { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "args", "description": null, "args": [ { "name": "includeDeprecated", "description": null, "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": "false", "isDeprecated": false, "deprecationReason": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "type", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDeprecated", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "deprecationReason", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__InputValue", "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", "specifiedByUrl": null, "fields": [ { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "type", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "defaultValue", "description": "A GraphQL-formatted string representing the default value for this input value.", "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDeprecated", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "deprecationReason", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__EnumValue", "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", "specifiedByUrl": null, "fields": [ { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "isDeprecated", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "deprecationReason", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", "name": "__Directive", "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", "specifiedByUrl": null, "fields": [ { "name": "name", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "description", "description": null, "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "isRepeatable", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { "name": "locations", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", "name": "__DirectiveLocation", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null }, { "name": "args", "description": null, "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null } } } }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", "name": "__DirectiveLocation", "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", "specifiedByUrl": null, "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { "name": "QUERY", "description": "Location adjacent to a query operation.", "isDeprecated": false, "deprecationReason": null }, { "name": "MUTATION", "description": "Location adjacent to a mutation operation.", "isDeprecated": false, "deprecationReason": null }, { "name": "SUBSCRIPTION", "description": "Location adjacent to a subscription operation.", "isDeprecated": false, "deprecationReason": null }, { "name": "FIELD", "description": "Location adjacent to a field.", "isDeprecated": false, "deprecationReason": null }, { "name": "FRAGMENT_DEFINITION", "description": "Location adjacent to a fragment definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "FRAGMENT_SPREAD", "description": "Location adjacent to a fragment spread.", "isDeprecated": false, "deprecationReason": null }, { "name": "INLINE_FRAGMENT", "description": "Location adjacent to an inline fragment.", "isDeprecated": false, "deprecationReason": null }, { "name": "VARIABLE_DEFINITION", "description": "Location adjacent to a variable definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "SCHEMA", "description": "Location adjacent to a schema definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "SCALAR", "description": "Location adjacent to a scalar definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "OBJECT", "description": "Location adjacent to an object type definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "FIELD_DEFINITION", "description": "Location adjacent to a field definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "ARGUMENT_DEFINITION", "description": "Location adjacent to an argument definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "INTERFACE", "description": "Location adjacent to an interface definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "UNION", "description": "Location adjacent to a union definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "ENUM", "description": "Location adjacent to an enum definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "ENUM_VALUE", "description": "Location adjacent to an enum value definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "INPUT_OBJECT", "description": "Location adjacent to an input object type definition.", "isDeprecated": false, "deprecationReason": null }, { "name": "INPUT_FIELD_DEFINITION", "description": "Location adjacent to an input object field definition.", "isDeprecated": false, "deprecationReason": null } ], "possibleTypes": null } ], "directives": [ { "name": "entity", "description": null, "isRepeatable": false, "locations": [ "OBJECT" ], "args": [] }, { "name": "derivedFrom", "description": null, "isRepeatable": false, "locations": [ "FIELD_DEFINITION" ], "args": [ { "name": "field", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] }, { "name": "subgraphId", "description": null, "isRepeatable": false, "locations": [ "OBJECT" ], "args": [ { "name": "id", "description": null, "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] }, { "name": "include", "description": "Directs the executor to include this field or fragment only when the `if` argument is true.", "isRepeatable": false, "locations": [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], "args": [ { "name": "if", "description": "Included when true.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] }, { "name": "skip", "description": "Directs the executor to skip this field or fragment when the `if` argument is true.", "isRepeatable": false, "locations": [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], "args": [ { "name": "if", "description": "Skipped when true.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] }, { "name": "deprecated", "description": "Marks an element of a GraphQL schema as no longer supported.", "isRepeatable": false, "locations": [ "FIELD_DEFINITION", "ARGUMENT_DEFINITION", "INPUT_FIELD_DEFINITION", "ENUM_VALUE" ], "args": [ { "name": "reason", "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": "\"No longer supported\"", "isDeprecated": false, "deprecationReason": null } ] }, { "name": "specifiedBy", "description": "Exposes a URL that specifies the behaviour of this scalar.", "isRepeatable": false, "locations": [ "SCALAR" ], "args": [ { "name": "url", "description": "The URL that specifies the behaviour of this scalar.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] }, { "name": "client", "description": "Direct the client to resolve this field locally, either from the cache or local resolvers.", "isRepeatable": false, "locations": [ "FIELD", "FRAGMENT_DEFINITION", "INLINE_FRAGMENT" ], "args": [ { "name": "always", "description": "When true, the client will never use the cache for this value. See\nhttps://www.apollographql.com/docs/react/essentials/local-state/#forcing-resolvers-with-clientalways-true", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] }, { "name": "export", "description": "Export this locally resolved field as a variable to be used in the remainder of this query. See\nhttps://www.apollographql.com/docs/react/essentials/local-state/#using-client-fields-as-variables", "isRepeatable": false, "locations": [ "FIELD" ], "args": [ { "name": "as", "description": "The variable name to export this field as.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] }, { "name": "connection", "description": "Specify a custom store key for this result. See\nhttps://www.apollographql.com/docs/react/advanced/caching/#the-connection-directive", "isRepeatable": false, "locations": [ "FIELD" ], "args": [ { "name": "key", "description": "Specify the store key.", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { "name": "filter", "description": "An array of query argument names to include in the generated custom store key.", "type": { "kind": "LIST", "name": null, "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } } }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null } ] } ] } } ================================================ FILE: src/apollo/client.ts ================================================ import { ApolloClient, InMemoryCache } from '@apollo/client' export const healthClient = new ApolloClient({ uri: 'https://api.thegraph.com/index-node/graphql', cache: new InMemoryCache(), }) export const blockClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const client = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const avalancheClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const avalancheBlockClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/lynnshaoyu/avalanche-blocks', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) export const arbitrumClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-arbitrum-one?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) export const arbitrumBlockClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) export const optimismClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/ianlapham/optimism-post-regenesis?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const baseClient = new ApolloClient({ uri: 'https://api.studio.thegraph.com/query/48211/uniswap-v3-base/version/latest?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const baseBlockClient = new ApolloClient({ uri: 'https://api.studio.thegraph.com/query/48211/base-blocks/version/latest', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) export const bscClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-bsc?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const bscBlockClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/wombat-exchange/bnb-chain-block', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) export const optimismBlockClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/ianlapham/uni-testing-subgraph', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) export const polygonClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const polygonBlockClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) export const celoClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/jesse-sawa/uniswap-celo?source=uniswap', cache: new InMemoryCache({ typePolicies: { Token: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, Pool: { // Singleton types that have no identifying field can use an empty // array for their keyFields. keyFields: false, }, }, }), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'no-cache', }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all', }, }, }) export const celoBlockClient = new ApolloClient({ uri: 'https://api.thegraph.com/subgraphs/name/jesse-sawa/celo-blocks', cache: new InMemoryCache(), queryDeduplication: true, defaultOptions: { watchQuery: { fetchPolicy: 'cache-first', }, query: { fetchPolicy: 'cache-first', errorPolicy: 'all', }, }, }) ================================================ FILE: src/components/BarChart/alt.tsx ================================================ import React, { Dispatch, SetStateAction, ReactNode } from 'react' import { BarChart, ResponsiveContainer, XAxis, Tooltip, Bar } from 'recharts' import styled from 'styled-components' import Card from 'components/Card' import { RowBetween } from 'components/Row' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import useTheme from 'hooks/useTheme' import { VolumeWindow } from 'types' import { LoadingRows } from 'components/Loader' dayjs.extend(utc) const DEFAULT_HEIGHT = 300 const Wrapper = styled(Card)` width: 100%; height: ${DEFAULT_HEIGHT}px; padding: 1rem; padding-right: 2rem; display: flex; background-color: ${({ theme }) => theme.bg0}; flex-direction: column; > * { font-size: 1rem; } ` export type LineChartProps = { data: any[] color?: string | undefined height?: number | undefined minHeight?: number setValue?: Dispatch> // used for value on hover setLabel?: Dispatch> // used for label of valye value?: number label?: string activeWindow?: VolumeWindow topLeft?: ReactNode | undefined topRight?: ReactNode | undefined bottomLeft?: ReactNode | undefined bottomRight?: ReactNode | undefined } & React.HTMLAttributes const CustomBar = ({ x, y, width, height, fill, }: { x: number y: number width: number height: number fill: string }) => { if (isNaN(x) || isNaN(y) || isNaN(width) || isNaN(height)) { return null } return ( ) } const Chart = ({ data, color = '#56B2A4', setValue, setLabel, value, label, activeWindow, topLeft, topRight, bottomLeft, bottomRight, minHeight = DEFAULT_HEIGHT, ...rest }: LineChartProps) => { const theme = useTheme() const parsedValue = value const now = dayjs() return ( {topLeft ?? null} {topRight ?? null} {data?.length === 0 ? (
) : ( { setLabel && setLabel(undefined) setValue && setValue(undefined) }} > dayjs(time).format(activeWindow === VolumeWindow.monthly ? 'MMM' : 'DD')} minTickGap={10} /> { if (setValue && parsedValue !== config.payload.value) { setValue(config.payload.value) } const formattedTime = dayjs(config.payload.time).format('MMM D') const formattedTimeDaily = dayjs(config.payload.time).format('MMM D YYYY') const formattedTimePlusWeek = dayjs(config.payload.time).add(1, 'week') const formattedTimePlusMonth = dayjs(config.payload.time).add(1, 'month') if (setLabel && label !== formattedTime) { if (activeWindow === VolumeWindow.weekly) { const isCurrent = formattedTimePlusWeek.isAfter(now) setLabel( formattedTime + '-' + (isCurrent ? 'current' : formattedTimePlusWeek.format('MMM D, YYYY')), ) } else if (activeWindow === VolumeWindow.monthly) { const isCurrent = formattedTimePlusMonth.isAfter(now) setLabel( formattedTime + '-' + (isCurrent ? 'current' : formattedTimePlusMonth.format('MMM D, YYYY')), ) } else { setLabel(formattedTimeDaily) } } }} /> { return }} /> )} {bottomLeft ?? null} {bottomRight ?? null} ) } export default Chart ================================================ FILE: src/components/BarChart/index.tsx ================================================ import React, { useRef, useState, useEffect, useCallback, Dispatch, SetStateAction, ReactNode } from 'react' import { createChart, IChartApi } from 'lightweight-charts' import { RowBetween } from 'components/Row' import Card from '../Card' import styled from 'styled-components' import useTheme from 'hooks/useTheme' import usePrevious from 'hooks/usePrevious' import { formatDollarAmount } from 'utils/numbers' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' dayjs.extend(utc) const Wrapper = styled(Card)` width: 100%; padding: 1rem; padding-right: 2rem; display: flex; background-color: ${({ theme }) => theme.bg0}; flex-direction: column; > * { font-size: 1rem; } ` const DEFAULT_HEIGHT = 300 export type LineChartProps = { data: any[] color?: string | undefined height?: number | undefined minHeight?: number setValue?: Dispatch> // used for value on hover setLabel?: Dispatch> // used for label of valye topLeft?: ReactNode | undefined topRight?: ReactNode | undefined bottomLeft?: ReactNode | undefined bottomRight?: ReactNode | undefined } & React.HTMLAttributes const BarChart = ({ data, color = '#56B2A4', setValue, setLabel, topLeft, topRight, bottomLeft, bottomRight, height = DEFAULT_HEIGHT, minHeight = DEFAULT_HEIGHT, ...rest }: LineChartProps) => { const theme = useTheme() const textColor = theme?.text2 const chartRef = useRef(null) const [chartCreated, setChart] = useState() const dataPrev = usePrevious(data) // reset on new data useEffect(() => { if (dataPrev !== data && chartCreated) { chartCreated.resize(0, 0) setChart(undefined) } }, [data, dataPrev, chartCreated]) // for reseting value on hover exit const currentValue = data[data.length - 1]?.value const handleResize = useCallback(() => { if (chartCreated && chartRef?.current?.parentElement) { chartCreated.resize(chartRef.current.parentElement.clientWidth - 32, height) chartCreated.timeScale().fitContent() chartCreated.timeScale().scrollToPosition(0, false) } }, [chartCreated, chartRef, height]) // add event listener for resize const isClient = typeof window === 'object' useEffect(() => { if (!isClient) { return } window.addEventListener('resize', handleResize) return () => window.removeEventListener('resize', handleResize) }, [isClient, chartRef, handleResize]) // Empty array ensures that effect is only run on mount and unmount // if chart not instantiated in canvas, create it useEffect(() => { if (!chartCreated && data && !!chartRef?.current?.parentElement) { const chart = createChart(chartRef.current, { height: height, width: chartRef.current.parentElement.clientWidth - 62, layout: { backgroundColor: 'transparent', textColor: '#565A69', fontFamily: 'Inter var', }, rightPriceScale: { scaleMargins: { top: 0.1, bottom: 0, }, drawTicks: false, borderVisible: false, visible: false, }, timeScale: { borderVisible: false, }, watermark: { color: 'rgba(0, 0, 0, 0)', }, grid: { horzLines: { visible: false, }, vertLines: { visible: false, }, }, crosshair: { horzLine: { visible: false, labelVisible: false, }, vertLine: { visible: true, style: 3, width: 1, color: '#505050', labelBackgroundColor: color, labelVisible: false, }, }, }) chart.timeScale().fitContent() setChart(chart) } }, [color, chartCreated, currentValue, data, height, setValue, textColor, theme]) useEffect(() => { if (chartCreated && data) { const series = chartCreated.addHistogramSeries({ color: color, }) series.setData(data) chartCreated.timeScale().fitContent() series.applyOptions({ priceFormat: { type: 'custom', minMove: 0.02, formatter: (price: any) => formatDollarAmount(price), }, }) // update the title when hovering on the chart chartCreated.subscribeCrosshairMove(function (param) { if ( chartRef?.current && (param === undefined || param.time === undefined || (param && param.point && param.point.x < 0) || (param && param.point && param.point.x > chartRef.current.clientWidth) || (param && param.point && param.point.y < 0) || (param && param.point && param.point.y > height)) ) { setValue && setValue(undefined) setLabel && setLabel(undefined) } else if (series && param) { const time = param?.time as { day: number; year: number; month: number } const timeString = dayjs(time.year + '-' + time.month + '-' + time.day).format('MMM D, YYYY') const price = parseFloat(param?.seriesPrices?.get(series)?.toString() ?? currentValue) setValue && setValue(price) setLabel && timeString && setLabel(timeString) } }) } }, [chartCreated, color, currentValue, data, height, setLabel, setValue, theme?.bg0]) return ( {topLeft ?? null} {topRight ?? null}
{bottomLeft ?? null} {bottomRight ?? null} ) } export default BarChart ================================================ FILE: src/components/Button/index.tsx ================================================ import React, { HTMLAttributes } from 'react' import styled from 'styled-components' import { darken, lighten } from 'polished' import { RowBetween } from '../Row' import { ChevronDown, Check, Star } from 'react-feather' import { Button as RebassButton, ButtonProps } from 'rebass/styled-components' import useTheme from 'hooks/useTheme' const Base = styled(RebassButton)<{ padding?: string width?: string borderRadius?: string altDisabledStyle?: boolean }>` padding: ${({ padding }) => (padding ? padding : '8px 16px')}; width: ${({ width }) => (width ? width : '100%')}; font-weight: 500; text-align: center; border-radius: 12px; border-radius: ${({ borderRadius }) => borderRadius && borderRadius}; outline: none; border: 1px solid transparent; color: white; text-decoration: none; display: flex; justify-content: center; flex-wrap: nowrap; align-items: center; cursor: pointer; position: relative; z-index: 1; &:disabled { cursor: auto; } > * { user-select: none; } ` export const ButtonPrimary = styled(Base)<{ bgColor?: string; altDisabledStyle?: boolean }>` background-color: ${({ theme, bgColor }) => bgColor ?? theme.primary1}; color: white; &:focus { box-shadow: 0 0 0 1pt ${({ theme, bgColor }) => darken(0.05, bgColor ?? theme.primary1)}; background-color: ${({ theme, bgColor }) => darken(0.05, bgColor ?? theme.primary1)}; } &:hover { background-color: ${({ theme, bgColor }) => darken(0.05, bgColor ?? theme.primary1)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme, bgColor }) => darken(0.1, bgColor ?? theme.primary1)}; background-color: ${({ theme, bgColor }) => darken(0.1, bgColor ?? theme.primary1)}; } &:disabled { background-color: ${({ theme, altDisabledStyle, disabled }) => altDisabledStyle ? (disabled ? theme.bg3 : theme.primary1) : theme.bg3}; color: ${({ theme, altDisabledStyle, disabled }) => altDisabledStyle ? (disabled ? theme.text3 : 'white') : theme.text3}; cursor: auto; box-shadow: none; border: 1px solid transparent; outline: none; opacity: ${({ altDisabledStyle }) => (altDisabledStyle ? '0.5' : '1')}; } ` export const ButtonLight = styled(Base)` background-color: ${({ theme }) => theme.primary5}; color: ${({ theme }) => theme.primaryText1}; font-size: 16px; font-weight: 500; &:focus { box-shadow: 0 0 0 1pt ${({ theme, disabled }) => !disabled && darken(0.03, theme.primary5)}; background-color: ${({ theme, disabled }) => !disabled && darken(0.03, theme.primary5)}; } &:hover { background-color: ${({ theme, disabled }) => !disabled && darken(0.03, theme.primary5)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme, disabled }) => !disabled && darken(0.05, theme.primary5)}; background-color: ${({ theme, disabled }) => !disabled && darken(0.05, theme.primary5)}; } :disabled { opacity: 0.4; :hover { cursor: auto; background-color: ${({ theme }) => theme.primary5}; box-shadow: none; border: 1px solid transparent; outline: none; } } ` export const ButtonGray = styled(Base)` background-color: ${({ theme }) => theme.bg3}; color: ${({ theme }) => theme.text2}; font-size: 16px; font-weight: 500; outline: none; &:focus { background-color: ${({ theme, disabled }) => !disabled && darken(0.05, theme.bg4)}; outline: none; } &:hover { background-color: ${({ theme, disabled }) => !disabled && darken(0.05, theme.bg4)}; outline: none; } &:active { background-color: ${({ theme, disabled }) => !disabled && darken(0.1, theme.bg4)}; outline: none; } ` export const ButtonSecondary = styled(Base)<{ padding?: string }>` border: 1px solid ${({ theme }) => theme.primary4}; color: ${({ theme }) => theme.primary1}; background-color: transparent; font-size: 16px; border-radius: 12px; padding: ${({ padding }) => (padding ? padding : '10px')}; &:focus { box-shadow: 0 0 0 1pt ${({ theme }) => theme.primary4}; border: 1px solid ${({ theme }) => theme.primary3}; } &:hover { border: 1px solid ${({ theme }) => theme.primary3}; } &:active { box-shadow: 0 0 0 1pt ${({ theme }) => theme.primary4}; border: 1px solid ${({ theme }) => theme.primary3}; } &:disabled { opacity: 50%; cursor: auto; } a:hover { text-decoration: none; } ` export const ButtonPink = styled(Base)` background-color: ${({ theme }) => theme.primary1}; color: white; &:focus { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.05, theme.primary1)}; background-color: ${({ theme }) => darken(0.05, theme.primary1)}; } &:hover { background-color: ${({ theme }) => darken(0.05, theme.primary1)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.1, theme.primary1)}; background-color: ${({ theme }) => darken(0.1, theme.primary1)}; } &:disabled { background-color: ${({ theme }) => theme.primary1}; opacity: 50%; cursor: auto; } ` export const ButtonUNIGradient = styled(ButtonPrimary)` color: white; padding: 4px 8px; height: 36px; font-weight: 500; background-color: ${({ theme }) => theme.bg3}; background: radial-gradient(174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100%), #edeef2; width: fit-content; position: relative; cursor: pointer; border: none; white-space: no-wrap; :hover { opacity: 0.8; } :active { opacity: 0.9; } ` export const ButtonOutlined = styled(Base)` border: 1px solid ${({ theme }) => theme.bg2}; background-color: transparent; color: ${({ theme }) => theme.text1}; &:focus { box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4}; } &:hover { box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4}; } &:active { box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4}; } &:disabled { opacity: 50%; cursor: auto; } ` export const ButtonEmpty = styled(Base)` background-color: transparent; color: ${({ theme }) => theme.primary1}; display: flex; justify-content: center; align-items: center; &:focus { text-decoration: underline; } &:hover { text-decoration: none; } &:active { text-decoration: none; } &:disabled { opacity: 50%; cursor: auto; } ` export const ButtonWhite = styled(Base)` border: 1px solid #edeef2; background-color: ${({ theme }) => theme.bg1}; color: black; &:focus { // eslint-disable-next-line @typescript-eslint/no-unused-vars box-shadow: 0 0 0 1pt ${darken(0.05, '#edeef2')}; } &:hover { box-shadow: 0 0 0 1pt ${darken(0.1, '#edeef2')}; } &:active { box-shadow: 0 0 0 1pt ${darken(0.1, '#edeef2')}; } &:disabled { opacity: 50%; cursor: auto; } ` const ButtonConfirmedStyle = styled(Base)` background-color: ${({ theme }) => lighten(0.5, theme.green1)}; color: ${({ theme }) => theme.green1}; border: 1px solid ${({ theme }) => theme.green1}; &:disabled { opacity: 50%; cursor: auto; } ` const ButtonErrorStyle = styled(Base)` background-color: ${({ theme }) => theme.red1}; border: 1px solid ${({ theme }) => theme.red1}; &:focus { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.05, theme.red1)}; background-color: ${({ theme }) => darken(0.05, theme.red1)}; } &:hover { background-color: ${({ theme }) => darken(0.05, theme.red1)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.1, theme.red1)}; background-color: ${({ theme }) => darken(0.1, theme.red1)}; } &:disabled { opacity: 50%; cursor: auto; box-shadow: none; background-color: ${({ theme }) => theme.red1}; border: 1px solid ${({ theme }) => theme.red1}; } ` export function ButtonConfirmed({ confirmed, altDisabledStyle, ...rest }: { confirmed?: boolean; altDisabledStyle?: boolean } & ButtonProps) { if (confirmed) { return } else { return } } export function ButtonError({ error, ...rest }: { error?: boolean } & ButtonProps) { if (error) { return } else { return } } export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) { return (
{children}
) } export function ButtonDropdownGrey({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) { return (
{children}
) } export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) { return (
{children}
) } export function ButtonRadio({ active, ...rest }: { active?: boolean } & ButtonProps) { if (!active) { return } else { return } } const ActiveOutlined = styled(ButtonOutlined)` border: 1px solid; border-color: ${({ theme }) => theme.primary1}; ` const Circle = styled.div` height: 20px; width: 20px; border-radius: 50%; background-color: ${({ theme }) => theme.primary1}; display: flex; align-items: center; justify-content: center; ` const CheckboxWrapper = styled.div` width: 30px; padding: 0 10px; ` export function ButtonRadioChecked({ active = false, children, ...rest }: { active?: boolean } & ButtonProps) { if (!active) { return ( {{children}} ) } else { return ( { {children} } ) } } const HoverIcon = styled.div` display: flex; justify-content: center; align-items: center; z-index: 9999; :hover { cursor: pointer; opacity: 0.6; } ` export const SavedIcon = ({ fill = false, size = '20px', ...rest }: { fill: boolean; size?: string } & HTMLAttributes) => { const theme = useTheme() return ( ) } export const SmallOptionButton = styled(Base)<{ $active?: boolean }>` padding: 4px; width: fit-content; font-size: 12px; border-radius: 4px; min-width: 36px; background-color: ${({ $active, theme }) => ($active ? theme.bg2 : theme.bg1)}; color: ${({ $active, theme }) => ($active ? theme.text1 : theme.text2)}; :hover { opacity: 0.6; } ` export const SmallOption = styled(ButtonOutlined)` padding: 4px; ` ================================================ FILE: src/components/CandleChart/index.tsx ================================================ import React, { useRef, useState, useEffect, useCallback, Dispatch, SetStateAction, ReactNode } from 'react' import { createChart, IChartApi } from 'lightweight-charts' import { RowBetween } from 'components/Row' import Card from '../Card' import styled from 'styled-components' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import useTheme from 'hooks/useTheme' dayjs.extend(utc) const Wrapper = styled(Card)` width: 100%; padding: 1rem; display: flex; background-color: ${({ theme }) => theme.bg0}; flex-direction: column; > * { font-size: 1rem; } ` const DEFAULT_HEIGHT = 300 export type LineChartProps = { data: any[] color?: string | undefined height?: number | undefined minHeight?: number setValue?: Dispatch> // used for value on hover setLabel?: Dispatch> // used for value label on hover topLeft?: ReactNode | undefined topRight?: ReactNode | undefined bottomLeft?: ReactNode | undefined bottomRight?: ReactNode | undefined } & React.HTMLAttributes const CandleChart = ({ data, color = '#56B2A4', setValue, setLabel, topLeft, topRight, bottomLeft, bottomRight, height = DEFAULT_HEIGHT, minHeight = DEFAULT_HEIGHT, ...rest }: LineChartProps) => { const theme = useTheme() const textColor = theme?.text3 const chartRef = useRef(null) const [chartCreated, setChart] = useState() const handleResize = useCallback(() => { if (chartCreated && chartRef?.current?.parentElement) { chartCreated.resize(chartRef.current.parentElement.clientWidth - 32, height) chartCreated.timeScale().fitContent() chartCreated.timeScale().scrollToPosition(0, false) } }, [chartCreated, chartRef, height]) // add event listener for resize const isClient = typeof window === 'object' useEffect(() => { if (!isClient) { return } window.addEventListener('resize', handleResize) return () => window.removeEventListener('resize', handleResize) }, [isClient, chartRef, handleResize]) // Empty array ensures that effect is only run on mount and unmount // if chart not instantiated in canvas, create it useEffect(() => { if (!chartCreated && data && !!chartRef?.current?.parentElement) { const chart = createChart(chartRef.current, { height: height, width: chartRef.current.parentElement.clientWidth - 32, layout: { backgroundColor: 'transparent', textColor: '#565A69', fontFamily: 'Inter var', }, rightPriceScale: { scaleMargins: { top: 0.1, bottom: 0.1, }, borderVisible: false, }, timeScale: { borderVisible: false, secondsVisible: true, tickMarkFormatter: (unixTime: number) => { return dayjs.unix(unixTime).format('MM/DD h:mm A') }, }, watermark: { visible: false, }, grid: { horzLines: { visible: false, }, vertLines: { visible: false, }, }, crosshair: { horzLine: { visible: false, labelVisible: false, }, mode: 1, vertLine: { visible: true, labelVisible: false, style: 3, width: 1, color: '#505050', labelBackgroundColor: color, }, }, }) chart.timeScale().fitContent() setChart(chart) } }, [color, chartCreated, data, height, setValue, textColor, theme]) useEffect(() => { if (chartCreated && data) { const series = chartCreated.addCandlestickSeries({ upColor: 'green', downColor: 'red', borderDownColor: 'red', borderUpColor: 'green', wickDownColor: 'red', wickUpColor: 'green', }) series.setData(data) // update the title when hovering on the chart chartCreated.subscribeCrosshairMove(function (param) { if ( chartRef?.current && (param === undefined || param.time === undefined || (param && param.point && param.point.x < 0) || (param && param.point && param.point.x > chartRef.current.clientWidth) || (param && param.point && param.point.y < 0) || (param && param.point && param.point.y > height)) ) { // reset values setValue && setValue(undefined) setLabel && setLabel(undefined) } else if (series && param) { const timestamp = param.time as number const time = dayjs.unix(timestamp).utc().format('MMM D, YYYY h:mm A') + ' (UTC)' const parsed = param.seriesPrices.get(series) as { open: number } | undefined setValue && setValue(parsed?.open) setLabel && setLabel(time) } }) } }, [chartCreated, color, data, height, setValue, setLabel, theme]) return ( {topLeft ?? null} {topRight ?? null}
{bottomLeft ?? null} {bottomRight ?? null} ) } export default CandleChart ================================================ FILE: src/components/Card/index.tsx ================================================ import styled from 'styled-components' import { Box } from 'rebass/styled-components' const Card = styled(Box)<{ width?: string padding?: string border?: string borderRadius?: string $minHeight?: number }>` width: ${({ width }) => width ?? '100%'}; border-radius: 16px; padding: 1rem; padding: ${({ padding }) => padding}; border: ${({ border }) => border}; border-radius: ${({ borderRadius }) => borderRadius}; min-height: ${({ $minHeight }) => `${$minHeight}px`}; ` export default Card export const LightCard = styled(Card)` border: 1px solid ${({ theme }) => theme.bg2}; background-color: ${({ theme }) => theme.bg1}; ` export const LightGreyCard = styled(Card)` background-color: ${({ theme }) => theme.bg3}; ` export const GreyCard = styled(Card)` background-color: ${({ theme }) => theme.bg2}; ` export const DarkGreyCard = styled(Card)` background-color: ${({ theme }) => theme.bg0}; ` export const OutlineCard = styled(Card)` border: 1px solid ${({ theme }) => theme.bg3}; ` export const YellowCard = styled(Card)` background-color: rgba(243, 132, 30, 0.05); color: ${({ theme }) => theme.yellow3}; font-weight: 500; ` export const PinkCard = styled(Card)` background-color: rgba(255, 0, 122, 0.03); color: ${({ theme }) => theme.primary1}; font-weight: 500; ` export const BlueCard = styled(Card)` background-color: ${({ theme }) => theme.primary5}; color: ${({ theme }) => theme.blue2}; border-radius: 12px; width: fit-content; ` export const ScrollableX = styled.div` display: flex; flex-direction: row; width: 100%; overflow-x: auto; overflow-y: hidden; white-space: nowrap; ::-webkit-scrollbar { display: none; } ` export const GreyBadge = styled(Card)` width: fit-content; border-radius: 8px; background: ${({ theme }) => theme.bg3}; color: ${({ theme }) => theme.text1}; padding: 4px 6px; font-weight: 400; ` ================================================ FILE: src/components/Column/index.tsx ================================================ import styled from 'styled-components' const Column = styled.div` display: flex; flex-direction: column; justify-content: flex-start; ` export const ColumnCenter = styled(Column)` width: 100%; align-items: center; ` export const AutoColumn = styled.div<{ $gap?: 'sm' | 'md' | 'lg' | string justify?: 'stretch' | 'center' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'space-between' }>` display: grid; grid-auto-rows: auto; grid-row-gap: ${({ $gap }) => ($gap === 'sm' && '8px') || ($gap === 'md' && '12px') || ($gap === 'lg' && '24px') || $gap}; justify-items: ${({ justify }) => justify && justify}; ` export default Column ================================================ FILE: src/components/Confetti/index.tsx ================================================ import React from 'react' import ReactConfetti from 'react-confetti' import { useWindowSize } from '../../hooks/useWindowSize' // eslint-disable-next-line react/prop-types export default function Confetti({ start, variant }: { start: boolean; variant?: string }) { const { width, height } = useWindowSize() const _variant = variant ? variant : height && width && height > 1.5 * width ? 'bottom' : variant return start && width && height ? ( ) : null } ================================================ FILE: src/components/CurrencyLogo/index.tsx ================================================ import React, { useMemo } from 'react' import styled from 'styled-components' import { isAddress } from 'utils' import Logo from '../Logo' import { useCombinedActiveList } from 'state/lists/hooks' import useHttpLocations from 'hooks/useHttpLocations' import { useActiveNetworkVersion } from 'state/application/hooks' import { OptimismNetworkInfo } from 'constants/networks' import EthereumLogo from '../../assets/images/ethereum-logo.png' import { ChainId } from '@uniswap/sdk-core' export function chainIdToNetworkName(networkId: ChainId) { switch (networkId) { case ChainId.MAINNET: return 'ethereum' case ChainId.ARBITRUM_ONE: return 'arbitrum' case ChainId.OPTIMISM: return 'optimism' case ChainId.POLYGON: return 'polygon' case ChainId.BNB: return 'smartchain' case ChainId.BASE: return 'base' default: return 'ethereum' } } const getTokenLogoURL = ({ address, chainId }: { address: string; chainId: ChainId }) => { return `https://raw.githubusercontent.com/uniswap/assets/master/blockchains/${chainIdToNetworkName( chainId, )}/assets/${address}/logo.png` } const StyledLogo = styled(Logo)<{ size: string }>` width: ${({ size }) => size}; height: ${({ size }) => size}; border-radius: ${({ size }) => size}; box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075); background-color: ${({ theme }) => theme.white}; color: ${({ theme }) => theme.text4}; ` const StyledEthereumLogo = styled.img<{ size: string }>` width: ${({ size }) => size}; height: ${({ size }) => size}; box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075); border-radius: 24px; ` export default function CurrencyLogo({ address, size = '24px', style, ...rest }: { address?: string size?: string style?: React.CSSProperties }) { // useOptimismList() const optimismList = useCombinedActiveList()?.[10] const arbitrumList = useCombinedActiveList()?.[42161] const polygon = useCombinedActiveList()?.[137] const celo = useCombinedActiveList()?.[42220] const bnbList = useCombinedActiveList()?.[ChainId.BNB] const baseList = useCombinedActiveList()?.[ChainId.BASE] const [activeNetwork] = useActiveNetworkVersion() const checkSummed = isAddress(address) const optimismURI = useMemo(() => { if (checkSummed && optimismList?.[checkSummed]) { return optimismList?.[checkSummed].token.logoURI } return undefined }, [checkSummed, optimismList]) const uriLocationsOptimism = useHttpLocations(optimismURI) const arbitrumURI = useMemo(() => { if (checkSummed && arbitrumList?.[checkSummed]) { return arbitrumList?.[checkSummed].token.logoURI } return undefined }, [checkSummed, arbitrumList]) const uriLocationsArbitrum = useHttpLocations(arbitrumURI) const BNBURI = useMemo(() => { if (checkSummed && bnbList?.[checkSummed]) { return bnbList?.[checkSummed].token.logoURI } return undefined }, [checkSummed, bnbList]) const uriLocationsBNB = useHttpLocations(BNBURI) const BaseURI = useMemo(() => { if (checkSummed && baseList?.[checkSummed]) { return baseList?.[checkSummed].token.logoURI } return undefined }, [checkSummed, baseList]) const uriLocationsBase = useHttpLocations(BaseURI) const polygonURI = useMemo(() => { if (checkSummed && polygon?.[checkSummed]) { return polygon?.[checkSummed].token.logoURI } return undefined }, [checkSummed, polygon]) const uriLocationsPolygon = useHttpLocations(polygonURI) const celoURI = useMemo(() => { if (checkSummed && celo?.[checkSummed]) { return celo?.[checkSummed].token.logoURI } return undefined }, [checkSummed, celo]) const uriLocationsCelo = useHttpLocations(celoURI) //temp until token logo issue merged const tempSources: { [address: string]: string } = useMemo(() => { return { ['0x4dd28568d05f09b02220b09c2cb307bfd837cb95']: 'https://assets.coingecko.com/coins/images/18143/thumb/wCPb0b88_400x400.png?1630667954', } }, []) const srcs: string[] = useMemo(() => { const checkSummed = isAddress(address) if (checkSummed && address) { const override = tempSources[address] return [ getTokenLogoURL({ address: checkSummed, chainId: activeNetwork.chainId }), ...uriLocationsOptimism, ...uriLocationsArbitrum, ...uriLocationsPolygon, ...uriLocationsCelo, ...uriLocationsBNB, ...uriLocationsBase, override, ] } return [] }, [ address, tempSources, activeNetwork.chainId, uriLocationsOptimism, uriLocationsArbitrum, uriLocationsPolygon, uriLocationsCelo, uriLocationsBNB, uriLocationsBase, ]) if (activeNetwork === OptimismNetworkInfo && address === '0x4200000000000000000000000000000000000006') { return } return } ================================================ FILE: src/components/DensityChart/CurrentPriceLabel.tsx ================================================ import React from 'react' import { ChartEntry } from './index' import { PoolData } from 'state/pools/reducer' import useTheme from 'hooks/useTheme' import styled from 'styled-components' import { AutoColumn } from 'components/Column' import { RowFixed } from 'components/Row' import { TYPE } from 'theme' const Wrapper = styled.div` border-radius: 8px; padding: 6px 12px; color: white; width: fit-content; font-size: 14px; background-color: ${({ theme }) => theme.bg2}; ` interface LabelProps { x: number y: number index: number } interface CurrentPriceLabelProps { data: ChartEntry[] | undefined chartProps: any poolData: PoolData } export function CurrentPriceLabel({ data, chartProps, poolData }: CurrentPriceLabelProps) { const theme = useTheme() const labelData = chartProps as LabelProps const entryData = data?.[labelData.index] if (entryData?.isCurrent) { const price0 = entryData.price0 const price1 = entryData.price1 return ( Current Price
{`1 ${poolData.token0.symbol} = ${Number(price0).toLocaleString(undefined, { minimumSignificantDigits: 1, })} ${poolData.token1.symbol}`} {`1 ${poolData.token1.symbol} = ${Number(price1).toLocaleString(undefined, { minimumSignificantDigits: 1, })} ${poolData.token0.symbol}`}
) } return null } ================================================ FILE: src/components/DensityChart/CustomToolTip.tsx ================================================ import React from 'react' import { PoolData } from 'state/pools/reducer' import styled from 'styled-components' import { LightCard } from 'components/Card' import useTheme from 'hooks/useTheme' import { AutoColumn } from 'components/Column' import { TYPE } from 'theme' import { RowBetween } from 'components/Row' import { formatAmount } from 'utils/numbers' const TooltipWrapper = styled(LightCard)` padding: 12px; width: 320px; opacity: 0.6; font-size: 12px; z-index: 10; ` interface CustomToolTipProps { chartProps: any poolData: PoolData currentPrice: number | undefined } export function CustomToolTip({ chartProps, poolData, currentPrice }: CustomToolTipProps) { const theme = useTheme() const price0 = chartProps?.payload?.[0]?.payload.price0 const price1 = chartProps?.payload?.[0]?.payload.price1 const tvlToken0 = chartProps?.payload?.[0]?.payload.tvlToken0 const tvlToken1 = chartProps?.payload?.[0]?.payload.tvlToken1 return ( Tick stats {poolData?.token0?.symbol} Price: {price0 ? Number(price0).toLocaleString(undefined, { minimumSignificantDigits: 1, }) : ''}{' '} {poolData?.token1?.symbol} {poolData?.token1?.symbol} Price: {price1 ? Number(price1).toLocaleString(undefined, { minimumSignificantDigits: 1, }) : ''}{' '} {poolData?.token0?.symbol} {currentPrice && price0 && currentPrice > price1 ? ( {poolData?.token0?.symbol} Locked: {tvlToken0 ? formatAmount(tvlToken0) : ''} {poolData?.token0?.symbol} ) : ( {poolData?.token1?.symbol} Locked: {tvlToken1 ? formatAmount(tvlToken1) : ''} {poolData?.token1?.symbol} )} ) } export default CustomToolTip ================================================ FILE: src/components/DensityChart/index.tsx ================================================ import { fetchTicksSurroundingPrice, TickProcessed } from 'data/pools/tickData' import React, { useEffect, useMemo, useState, useCallback } from 'react' import { BarChart, Bar, LabelList, XAxis, Tooltip, ResponsiveContainer, Cell } from 'recharts' import Loader from 'components/Loader' import styled from 'styled-components' import useTheme from 'hooks/useTheme' import { usePoolDatas, usePoolTickData } from 'state/pools/hooks' import { MAX_UINT128 } from '../../constants/index' import { isAddress } from 'utils' import { Pool, TickMath, TICK_SPACINGS, FeeAmount } from '@uniswap/v3-sdk' import { PoolData } from 'state/pools/reducer' import { CurrentPriceLabel } from './CurrentPriceLabel' import CustomToolTip from './CustomToolTip' import { Token, CurrencyAmount } from '@uniswap/sdk-core' import JSBI from 'jsbi' import { useClients } from 'state/application/hooks' const Wrapper = styled.div` position: relative; width: 100%; height: 400px; ` const ControlsWrapper = styled.div` position: absolute; right: 40px; bottom: 100px; padding: 4px; border-radius: 8px; display: grid; grid-template-columns: 1fr 1fr; grid-column-gap: 6px; ` const ActionButton = styled.div<{ disabled?: boolean }>` width: 32x; border-radius: 50%; background-color: black; padding: 4px 8px; display: flex; justify-content: center; font-size: 18px; font-weight: 500; align-items: center; opacity: ${({ disabled }) => (disabled ? 0.4 : 0.9)}; background-color: ${({ theme, disabled }) => (disabled ? theme.bg3 : theme.bg2)}; user-select: none; :hover { cursor: pointer; opacity: 0.4; } ` interface DensityChartProps { address: string } export interface ChartEntry { index: number isCurrent: boolean activeLiquidity: number price0: number price1: number tvlToken0: number tvlToken1: number } interface ZoomStateProps { left: number right: number refAreaLeft: string | number refAreaRight: string | number } const INITIAL_TICKS_TO_FETCH = 200 const ZOOM_INTERVAL = 20 const initialState = { left: 0, right: INITIAL_TICKS_TO_FETCH * 2 + 1, refAreaLeft: '', refAreaRight: '', } export default function DensityChart({ address }: DensityChartProps) { const theme = useTheme() const { dataClient } = useClients() // poolData const poolData: PoolData = usePoolDatas([address])[0] const formattedAddress0 = isAddress(poolData.token0.address) const formattedAddress1 = isAddress(poolData.token1.address) const feeTier = poolData?.feeTier // parsed tokens const token0 = useMemo(() => { return poolData && formattedAddress0 && formattedAddress1 ? new Token(1, formattedAddress0, poolData.token0.decimals) : undefined }, [formattedAddress0, formattedAddress1, poolData]) const token1 = useMemo(() => { return poolData && formattedAddress1 && formattedAddress1 ? new Token(1, formattedAddress1, poolData.token1.decimals) : undefined }, [formattedAddress1, poolData]) // tick data tracking const [poolTickData, updatePoolTickData] = usePoolTickData(address) const [ticksToFetch, setTicksToFetch] = useState(INITIAL_TICKS_TO_FETCH) const amountTicks = ticksToFetch * 2 + 1 const [loading, setLoading] = useState(false) const [zoomState, setZoomState] = useState(initialState) useEffect(() => { async function fetch() { const { data } = await fetchTicksSurroundingPrice(address, dataClient, ticksToFetch) if (data) { updatePoolTickData(address, data) } } if (!poolTickData || (poolTickData && poolTickData.ticksProcessed.length < amountTicks)) { fetch() } }, [address, poolTickData, updatePoolTickData, ticksToFetch, amountTicks, dataClient]) const [formattedData, setFormattedData] = useState() useEffect(() => { async function formatData() { if (poolTickData) { const newData = await Promise.all( poolTickData.ticksProcessed.map(async (t: TickProcessed, i) => { const active = t.tickIdx === poolTickData.activeTickIdx const sqrtPriceX96 = TickMath.getSqrtRatioAtTick(t.tickIdx) const feeAmount: FeeAmount = poolData.feeTier const mockTicks = [ { index: t.tickIdx - TICK_SPACINGS[feeAmount], liquidityGross: t.liquidityGross, liquidityNet: JSBI.multiply(t.liquidityNet, JSBI.BigInt('-1')), }, { index: t.tickIdx, liquidityGross: t.liquidityGross, liquidityNet: t.liquidityNet, }, ] const pool = token0 && token1 && feeTier ? new Pool(token0, token1, feeTier, sqrtPriceX96, t.liquidityActive, t.tickIdx, mockTicks) : undefined const nextSqrtX96 = poolTickData.ticksProcessed[i - 1] ? TickMath.getSqrtRatioAtTick(poolTickData.ticksProcessed[i - 1].tickIdx) : undefined const maxAmountToken0 = token0 ? CurrencyAmount.fromRawAmount(token0, MAX_UINT128.toString()) : undefined const outputRes0 = pool && maxAmountToken0 ? await pool.getOutputAmount(maxAmountToken0, nextSqrtX96) : undefined const token1Amount = outputRes0?.[0] as CurrencyAmount | undefined const amount0 = token1Amount ? parseFloat(token1Amount.toExact()) * parseFloat(t.price1) : 0 const amount1 = token1Amount ? parseFloat(token1Amount.toExact()) : 0 return { index: i, isCurrent: active, activeLiquidity: parseFloat(t.liquidityActive.toString()), price0: parseFloat(t.price0), price1: parseFloat(t.price1), tvlToken0: amount0, tvlToken1: amount1, } }), ) // offset the values to line off bars with TVL used to swap across bar newData?.map((entry, i) => { if (i > 0) { newData[i - 1].tvlToken0 = entry.tvlToken0 newData[i - 1].tvlToken1 = entry.tvlToken1 } }) if (newData) { if (loading) { setLoading(false) } setFormattedData(newData) } return } else { return [] } } if (!formattedData) { formatData() } }, [feeTier, formattedData, loading, poolData.feeTier, poolTickData, token0, token1]) const atZoomMax = zoomState.left + ZOOM_INTERVAL >= zoomState.right - ZOOM_INTERVAL - 1 const atZoomMin = zoomState.left - ZOOM_INTERVAL < 0 const handleZoomIn = useCallback(() => { !atZoomMax && setZoomState({ ...zoomState, left: zoomState.left + ZOOM_INTERVAL, right: zoomState.right - ZOOM_INTERVAL, }) }, [zoomState, atZoomMax]) const handleZoomOut = useCallback(() => { if (atZoomMin) { setLoading(true) setTicksToFetch(ticksToFetch + ZOOM_INTERVAL) setFormattedData(undefined) setZoomState({ ...zoomState, left: 0, right: amountTicks, }) } else { setZoomState({ ...zoomState, left: zoomState.left - ZOOM_INTERVAL, right: zoomState.right + ZOOM_INTERVAL, }) } }, [amountTicks, atZoomMin, ticksToFetch, zoomState]) const zoomedData = useMemo(() => { if (formattedData) { return formattedData.slice(zoomState.left, zoomState.right) } return undefined }, [formattedData, zoomState.left, zoomState.right]) // reset data on address change useEffect(() => { setFormattedData(undefined) }, [address]) if (!poolTickData) { return } const CustomBar = ({ x, y, width, height, fill, }: { x: number y: number width: number height: number fill: string }) => { if (isNaN(x) || isNaN(y) || isNaN(width) || isNaN(height)) { return null } return ( ) } return ( {!loading ? ( ( )} /> { // eslint-disable-next-line react/prop-types return }} > {zoomedData?.map((entry, index) => { return })} } /> ) : ( )} - + ) } ================================================ FILE: src/components/DoubleLogo/index.tsx ================================================ import React from 'react' import styled from 'styled-components' import CurrencyLogo from '../CurrencyLogo' const Wrapper = styled.div<{ $margin: boolean; $sizeraw: number }>` position: relative; display: flex; flex-direction: row; margin-right: ${({ $sizeraw, $margin }) => $margin && ($sizeraw / 3 + 8).toString() + 'px'}; ` interface DoubleCurrencyLogoProps { margin?: boolean size?: number address0?: string address1?: string } const HigherLogo = styled(CurrencyLogo)` z-index: 2; ` export default function DoubleCurrencyLogo({ address0, address1, size = 16, margin = false }: DoubleCurrencyLogoProps) { return ( {address0 && } {address1 && } ) } ================================================ FILE: src/components/FormattedCurrencyAmount/index.tsx ================================================ import React from 'react' import { CurrencyAmount, Fraction, Token } from '@uniswap/sdk-core' import JSBI from 'jsbi' const CURRENCY_AMOUNT_MIN = new Fraction(JSBI.BigInt(1), JSBI.BigInt(1000000)) export default function FormattedCurrencyAmount({ currencyAmount, significantDigits = 4, }: { currencyAmount: CurrencyAmount significantDigits?: number }) { return ( <> {currencyAmount.equalTo(JSBI.BigInt(0)) ? '0' : currencyAmount.greaterThan(CURRENCY_AMOUNT_MIN) ? currencyAmount.toSignificant(significantDigits) : `<${CURRENCY_AMOUNT_MIN.toSignificant(1)}`} ) } ================================================ FILE: src/components/Header/Polling.tsx ================================================ import React, { useState, useEffect } from 'react' import styled, { keyframes } from 'styled-components' import { TYPE, ExternalLink } from '../../theme' import { useActiveNetworkVersion, useSubgraphStatus } from '../../state/application/hooks' import { ExplorerDataType, getExplorerLink } from '../../utils' import useTheme from 'hooks/useTheme' import { EthereumNetworkInfo } from 'constants/networks' import { ChainId } from '@uniswap/sdk-core' const StyledPolling = styled.div` display: flex; color: white; margin-right: 1rem; border-radius: 4px; width: 192px; padding: 4px; background-color: ${({ theme }) => theme.bg2}; transition: opacity 0.25s ease; color: ${({ theme }) => theme.green1}; :hover { opacity: 1; } z-index: 9999; ${({ theme }) => theme.mediaWidth.upToMedium` display: none; `} ` const StyledPollingDot = styled.div` width: 8px; height: 8px; min-height: 8px; min-width: 8px; margin-left: 0.4rem; margin-top: 3px; border-radius: 50%; position: relative; background-color: ${({ theme }) => theme.green1}; ` const rotate360 = keyframes` from { transform: rotate(0deg); } to { transform: rotate(360deg); } ` const Spinner = styled.div` animation: ${rotate360} 1s cubic-bezier(0.83, 0, 0.17, 1) infinite; transform: translateZ(0); border-top: 1px solid transparent; border-right: 1px solid transparent; border-bottom: 1px solid transparent; border-left: 2px solid ${({ theme }) => theme.green1}; background: transparent; width: 14px; height: 14px; border-radius: 50%; position: relative; left: -3px; top: -3px; ` export default function Polling() { const theme = useTheme() const [activeNetwork] = useActiveNetworkVersion() const [status] = useSubgraphStatus() const [isMounted, setIsMounted] = useState(true) const latestBlock = activeNetwork === EthereumNetworkInfo ? status.headBlock : status.syncedBlock useEffect( () => { const timer1 = setTimeout(() => setIsMounted(true), 1000) // this will clear Timeout when component unmount like in willComponentUnmount return () => { setIsMounted(false) clearTimeout(timer1) } }, [status], //useEffect will run only one time //if you pass a value to array, like this [data] than clearTimeout will run every time this value changes (useEffect re-run) ) return ( Latest synced block:{' '} {latestBlock} {!isMounted && } ) } ================================================ FILE: src/components/Header/TopBar.tsx ================================================ import React from 'react' import styled from 'styled-components' import { AutoRow, RowBetween, RowFixed } from 'components/Row' import { ExternalLink, TYPE } from 'theme' import { useEthPrices } from 'hooks/useEthPrices' import { formatDollarAmount } from 'utils/numbers' import Polling from './Polling' import { useActiveNetworkVersion } from '../../state/application/hooks' import { SupportedNetwork } from '../../constants/networks' const Wrapper = styled.div` width: 100%; background-color: ${({ theme }) => theme.black}; padding: 10px 20px; ` const Item = styled(TYPE.main)` font-size: 12px; ` const StyledLink = styled(ExternalLink)` font-size: 12px; color: ${({ theme }) => theme.text1}; ` const TopBar = () => { const ethPrices = useEthPrices() const [activeNetwork] = useActiveNetworkVersion() return ( {activeNetwork.id === SupportedNetwork.CELO ? ( Celo Price: ) : activeNetwork.id === SupportedNetwork.BNB ? ( BNB Price: ) : activeNetwork.id === SupportedNetwork.AVALANCHE ? ( AVAX Price: ) : ( Eth Price: )} {formatDollarAmount(ethPrices?.current)} V2 Analytics Docs App ) } export default TopBar ================================================ FILE: src/components/Header/URLWarning.tsx ================================================ import React from 'react' import styled from 'styled-components' import { AlertTriangle, X } from 'react-feather' import { useURLWarningToggle, useURLWarningVisible } from '../../state/user/hooks' import { isMobile } from 'react-device-detect' const PhishAlert = styled.div<{ isActive: any }>` width: 100%; padding: 6px 6px; background-color: ${({ theme }) => theme.blue1}; color: white; font-size: 11px; justify-content: space-between; align-items: center; display: ${({ isActive }) => (isActive ? 'flex' : 'none')}; ` export const StyledClose = styled(X)` :hover { cursor: pointer; } ` export default function URLWarning() { const toggleURLWarning = useURLWarningToggle() const showURLWarning = useURLWarningVisible() return isMobile ? (
Make sure the URL is app.uniswap.org
) : window.location.hostname === 'app.uniswap.org' ? (
Always make sure the URL is app.uniswap.org - bookmark it to be safe.
) : null } ================================================ FILE: src/components/Header/index.tsx ================================================ import React from 'react' import { NavLink, useLocation } from 'react-router-dom' import { darken } from 'polished' import styled from 'styled-components' import LogoDark from '../../assets/svg/logo_white.svg' import Menu from '../Menu' import Row, { RowFixed, RowBetween } from '../Row' import SearchSmall from 'components/Search' import NetworkDropdown from 'components/Menu/NetworkDropdown' import { useActiveNetworkVersion } from 'state/application/hooks' import { networkPrefix } from 'utils/networkPrefix' import { AutoColumn } from 'components/Column' const HeaderFrame = styled.div` display: grid; grid-template-columns: 1fr 120px; align-items: center; justify-content: space-between; align-items: center; flex-direction: row; width: 100%; top: 0; position: relative; border-bottom: 1px solid rgba(0, 0, 0, 0.1); padding: 1rem; z-index: 2; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); background-color: ${({ theme }) => theme.bg0}; @media (max-width: 1080px) { grid-template-columns: 1fr; padding: 0.5rem 1rem; width: calc(100%); position: relative; } ${({ theme }) => theme.mediaWidth.upToExtraSmall` padding: 0.5rem 1rem; `} ` const HeaderControls = styled.div` display: flex; flex-direction: row; align-items: center; justify-self: flex-end; @media (max-width: 1080px) { display: none; } ` const HeaderRow = styled(RowFixed)` @media (max-width: 1080px) { width: 100%; } ` const HeaderLinks = styled(Row)` justify-content: center; @media (max-width: 1080px) { padding: 0.5rem; justify-content: flex-end; } ` const Title = styled(NavLink)` display: flex; align-items: center; pointer-events: auto; justify-self: flex-start; margin-right: 12px; :hover { cursor: pointer; } ${({ theme }) => theme.mediaWidth.upToSmall` justify-self: center; `}; ` const UniIcon = styled.div` transition: transform 0.3s ease; :hover { transform: rotate(-5deg); } ` const StyledNavLink = styled(NavLink)<{ $isActive: boolean }>` ${({ theme }) => theme.flexRowNoWrap} align-items: left; border-radius: 3rem; outline: none; cursor: pointer; text-decoration: none; font-size: 1rem; width: fit-content; margin: 0 6px; padding: 8px 12px; font-weight: 500; border-radius: ${({ $isActive }) => ($isActive ? '12px' : 'unset')}; background-color: ${({ theme, $isActive }) => ($isActive ? theme.bg2 : 'unset')}; color: ${({ theme, $isActive }) => ($isActive ? theme.text1 : theme.text3)}; :hover, :focus { color: ${({ theme }) => darken(0.1, theme.text1)}; } ` export const StyledMenuButton = styled.button` position: relative; width: 100%; height: 100%; border: none; background-color: transparent; margin: 0; padding: 0; height: 35px; background-color: ${({ theme }) => theme.bg3}; margin-left: 8px; padding: 0.15rem 0.5rem; border-radius: 0.5rem; :hover, :focus { cursor: pointer; outline: none; background-color: ${({ theme }) => theme.bg4}; } svg { margin-top: 2px; } > * { stroke: ${({ theme }) => theme.text1}; } ` const SmallContentGrouping = styled.div` width: 100%; display: none; @media (max-width: 1080px) { display: initial; } ` export default function Header() { const [activeNewtork] = useActiveNetworkVersion() const { pathname } = useLocation() return ( <UniIcon> <img width={'24px'} src={LogoDark} alt="logo" /> </UniIcon> Overview Pools Tokens ) } ================================================ FILE: src/components/HoverInlineText/index.tsx ================================================ import Tooltip from 'components/Tooltip' import React, { useState } from 'react' import styled from 'styled-components' const TextWrapper = styled.div<{ $margin: boolean $link: boolean color?: string fontSize?: string $adjustSize?: boolean }>` position: relative; margin-left: ${({ $margin }) => $margin && '4px'}; color: ${({ theme, $link, color }) => ($link ? theme.blue1 : color ?? theme.text1)}; font-size: ${({ fontSize }) => fontSize ?? 'inherit'}; :hover { cursor: pointer; } @media screen and (max-width: 600px) { font-size: ${({ $adjustSize }) => $adjustSize && '12px'}; } ` const HoverInlineText = ({ text, maxCharacters = 20, margin = false, adjustSize = false, fontSize, color, link, ...rest }: { text: string maxCharacters?: number margin?: boolean adjustSize?: boolean fontSize?: string color?: string link?: boolean }) => { const [showHover, setShowHover] = useState(false) if (!text) { return } if (text.length > maxCharacters) { return ( setShowHover(true)} onMouseLeave={() => setShowHover(false)} $margin={margin} $adjustSize={adjustSize} $link={!!link} color={color} fontSize={fontSize} {...rest} > {' ' + text.slice(0, maxCharacters - 1) + '...'} ) } return ( {text} ) } export default HoverInlineText ================================================ FILE: src/components/LineChart/alt.tsx ================================================ import React, { Dispatch, SetStateAction, ReactNode } from 'react' import { ResponsiveContainer, XAxis, Tooltip, AreaChart, Area } from 'recharts' import styled from 'styled-components' import Card from 'components/Card' import { RowBetween } from 'components/Row' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import useTheme from 'hooks/useTheme' import { darken } from 'polished' import { LoadingRows } from 'components/Loader' dayjs.extend(utc) const DEFAULT_HEIGHT = 300 const Wrapper = styled(Card)` width: 100%; height: ${DEFAULT_HEIGHT}px; padding: 1rem; padding-right: 2rem; display: flex; background-color: ${({ theme }) => theme.bg0}; flex-direction: column; > * { font-size: 1rem; } ` export type LineChartProps = { data: any[] color?: string | undefined height?: number | undefined minHeight?: number setValue?: Dispatch> // used for value on hover setLabel?: Dispatch> // used for label of valye value?: number label?: string topLeft?: ReactNode | undefined topRight?: ReactNode | undefined bottomLeft?: ReactNode | undefined bottomRight?: ReactNode | undefined } & React.HTMLAttributes const Chart = ({ data, color = '#56B2A4', value, label, setValue, setLabel, topLeft, topRight, bottomLeft, bottomRight, minHeight = DEFAULT_HEIGHT, ...rest }: LineChartProps) => { const theme = useTheme() const parsedValue = value return ( {topLeft ?? null} {topRight ?? null} {data?.length === 0 ? (
) : ( { setLabel && setLabel(undefined) setValue && setValue(undefined) }} > dayjs(time).format('DD')} minTickGap={10} /> { if (setValue && parsedValue !== config.payload.value) { setValue(config.payload.value) } const formattedTime = dayjs(config.payload.time).format('MMM D, YYYY') if (setLabel && label !== formattedTime) setLabel(formattedTime) }} /> )} {bottomLeft ?? null} {bottomRight ?? null} ) } export default Chart ================================================ FILE: src/components/LineChart/index.tsx ================================================ import React, { useRef, useState, useEffect, useCallback, Dispatch, SetStateAction, ReactNode } from 'react' import { createChart, IChartApi } from 'lightweight-charts' import { darken } from 'polished' import { RowBetween } from 'components/Row' import Card from '../Card' import styled from 'styled-components' import useTheme from 'hooks/useTheme' import usePrevious from 'hooks/usePrevious' import { formatDollarAmount } from 'utils/numbers' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' dayjs.extend(utc) const Wrapper = styled(Card)` width: 100%; padding: 1rem; display: flex; background-color: ${({ theme }) => theme.bg0}; flex-direction: column; > * { font-size: 1rem; } ` const DEFAULT_HEIGHT = 300 export type LineChartProps = { data: any[] color?: string | undefined height?: number | undefined minHeight?: number setValue?: Dispatch> // used for value on hover setLabel?: Dispatch> // used for label value topLeft?: ReactNode | undefined topRight?: ReactNode | undefined bottomLeft?: ReactNode | undefined bottomRight?: ReactNode | undefined } & React.HTMLAttributes const LineChart = ({ data, color = '#56B2A4', setValue, setLabel, topLeft, topRight, bottomLeft, bottomRight, height = DEFAULT_HEIGHT, minHeight = DEFAULT_HEIGHT, ...rest }: LineChartProps) => { // theming const theme = useTheme() const textColor = theme?.text2 // chart pointer const chartRef = useRef(null) const [chartCreated, setChart] = useState() const dataPrev = usePrevious(data) // reset on new data useEffect(() => { if (dataPrev !== data && chartCreated) { chartCreated.resize(0, 0) setChart(undefined) } }, [data, dataPrev, chartCreated]) // for reseting value on hover exit const currentValue = data[data.length - 1]?.value const handleResize = useCallback(() => { if (chartCreated && chartRef?.current?.parentElement) { chartCreated.resize(chartRef.current.parentElement.clientWidth - 32, height) chartCreated.timeScale().fitContent() chartCreated.timeScale().scrollToPosition(0, false) } }, [chartCreated, chartRef, height]) // add event listener for resize const isClient = typeof window === 'object' useEffect(() => { if (!isClient) { return } window.addEventListener('resize', handleResize) return () => window.removeEventListener('resize', handleResize) }, [isClient, chartRef, handleResize]) // Empty array ensures that effect is only run on mount and unmount // if chart not instantiated in canvas, create it useEffect(() => { if (!chartCreated && data && !!chartRef?.current?.parentElement) { const chart = createChart(chartRef.current, { height: height, width: chartRef.current.parentElement.clientWidth - 32, layout: { backgroundColor: 'transparent', textColor: '#565A69', fontFamily: 'Inter var', }, rightPriceScale: { scaleMargins: { top: 0.1, bottom: 0.1, }, drawTicks: false, borderVisible: false, }, timeScale: { borderVisible: false, }, watermark: { color: 'rgba(0, 0, 0, 0)', }, grid: { horzLines: { visible: false, }, vertLines: { visible: false, }, }, crosshair: { horzLine: { visible: false, labelVisible: false, }, vertLine: { visible: true, style: 0, width: 2, color: '#505050', labelVisible: false, }, }, }) chart.timeScale().fitContent() setChart(chart) } }, [color, chartCreated, currentValue, data, height, setValue, textColor, theme]) useEffect(() => { if (chartCreated && data) { const series = chartCreated.addAreaSeries({ lineColor: color, topColor: darken(0.36, color), bottomColor: theme?.bg0, lineWidth: 2, priceLineVisible: false, }) series.setData(data) chartCreated.timeScale().fitContent() chartCreated.timeScale().scrollToRealTime() series.applyOptions({ priceFormat: { type: 'custom', minMove: 0.02, formatter: (price: any) => formatDollarAmount(price), }, }) // update the title when hovering on the chart chartCreated.subscribeCrosshairMove(function (param) { if ( chartRef?.current && (param === undefined || param.time === undefined || (param && param.point && param.point.x < 0) || (param && param.point && param.point.x > chartRef.current.clientWidth) || (param && param.point && param.point.y < 0) || (param && param.point && param.point.y > height)) ) { setValue && setValue(undefined) setLabel && setLabel(undefined) } else if (series && param) { const price = parseFloat(param?.seriesPrices?.get(series)?.toString() ?? currentValue) const time = param?.time as { day: number; year: number; month: number } const timeString = dayjs(time.year + '-' + time.month + '-' + time.day).format('MMM D, YYYY') setValue && setValue(price) setLabel && timeString && setLabel(timeString) } }) } }, [chartCreated, color, currentValue, data, height, setLabel, setValue, theme]) return ( {topLeft ?? null} {topRight ?? null}
{bottomLeft ?? null} {bottomRight ?? null} ) } export default LineChart ================================================ FILE: src/components/ListLogo/index.tsx ================================================ import React from 'react' import styled from 'styled-components' import useHttpLocations from '../../hooks/useHttpLocations' import Logo from '../Logo' const StyledListLogo = styled(Logo)<{ size: string }>` width: ${({ size }) => size}; height: ${({ size }) => size}; ` export default function ListLogo({ logoURI, style, size = '24px', alt, }: { logoURI: string size?: string style?: React.CSSProperties alt?: string }) { const srcs: string[] = useHttpLocations(logoURI) return } ================================================ FILE: src/components/Loader/index.tsx ================================================ import React from 'react' import v3 from '../../assets/images/whitev3.svg' import styled, { keyframes, css } from 'styled-components' const rotate = keyframes` from { transform: rotate(0deg); } to { transform: rotate(360deg); } ` const StyledSVG = styled.svg<{ size: string; stroke?: string }>` animation: 2s ${rotate} linear infinite; height: ${({ size }) => size}; width: ${({ size }) => size}; path { stroke: ${({ stroke, theme }) => stroke ?? theme.primary1}; } ` /** * Takes in custom size and stroke for circle color, default to primary color as fill, * need ...rest for layered styles on top */ export default function Loader({ size = '16px', stroke, ...rest }: { size?: string stroke?: string [k: string]: any }) { return ( ) } const pulse = keyframes` 0% { transform: scale(1); } 60% { transform: scale(1.1); } 100% { transform: scale(1); } ` const Wrapper = styled.div<{ fill: number; height?: string }>` pointer-events: none; display: flex; align-items: center; justify-content: center; background-color: ${({ theme, fill }) => (fill ? 'black' : theme.bg0)}; height: 100%; width: 100%; ${(props) => props.fill && !props.height ? css` height: 100vh; ` : css` height: 180px; `} ` const AnimatedImg = styled.div` animation: ${pulse} 800ms linear infinite; & > * { width: 72px; } ` export const LocalLoader = ({ fill }: { fill: boolean }) => { return ( loading-icon ) } const loadingAnimation = keyframes` 0% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } ` export const LoadingRows = styled.div` display: grid; min-width: 75%; max-width: 100%; grid-column-gap: 0.5em; grid-row-gap: 0.8em; grid-template-columns: repeat(1, 1fr); & > div { animation: ${loadingAnimation} 1.5s infinite; animation-fill-mode: both; background: linear-gradient( to left, ${({ theme }) => theme.bg1} 25%, ${({ theme }) => theme.bg2} 50%, ${({ theme }) => theme.bg1} 75% ); background-size: 400%; border-radius: 12px; height: 2.4em; will-change: background-position; } & > div:nth-child(4n + 1) { grid-column: 1 / 3; } & > div:nth-child(4n) { grid-column: 3 / 4; margin-bottom: 2em; } ` ================================================ FILE: src/components/Logo/index.tsx ================================================ import React, { useState } from 'react' import { HelpCircle } from 'react-feather' import { ImageProps } from 'rebass' import styled from 'styled-components' const BAD_SRCS: { [tokenAddress: string]: true } = {} export interface LogoProps extends Pick { srcs: string[] } /** * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert */ export default function Logo({ srcs, alt, ...rest }: LogoProps) { const [, refresh] = useState(0) const src: string | undefined = srcs.find((src) => !BAD_SRCS[src]) if (src) { return ( {alt} { if (src) BAD_SRCS[src] = true refresh((i) => i + 1) }} /> ) } return } export const GenericImageWrapper = styled.img<{ size?: string }>` width: ${({ size }) => size ?? '20px'}; height: ${({ size }) => size ?? '20px'}; ` ================================================ FILE: src/components/Menu/NetworkDropdown.tsx ================================================ import { RowFixed, RowBetween } from 'components/Row' import { AvalancheNetworkInfo, BNBNetworkInfo, CeloNetworkInfo, PolygonNetworkInfo, SUPPORTED_NETWORK_VERSIONS, } from 'constants/networks' import useTheme from 'hooks/useTheme' import React, { useState, useRef } from 'react' import { ChevronDown } from 'react-feather' import { useActiveNetworkVersion } from 'state/application/hooks' import styled from 'styled-components' import { StyledInternalLink, TYPE } from 'theme' import { useOnClickOutside } from 'hooks/useOnClickOutside' import { AutoColumn } from 'components/Column' import { EthereumNetworkInfo } from '../../constants/networks' const Container = styled.div` position: relative; z-index: 40; ` const Wrapper = styled.div` border-radius: 12px; background-color: ${({ theme }) => theme.bg1}; padding: 6px 8px; margin-right: 12px; :hover { cursor: pointer; opacity: 0.7; } ` const LogaContainer = styled.div` position: relative; display: flex; flex-direction: row; align-items: center; justify-content: center; ` const LogoWrapper = styled.img` width: 20px; height: 20px; ` const FlyOut = styled.div` background-color: ${({ theme }) => theme.bg1}; position: absolute; top: 40px; left: 0; border-radius: 12px; padding: 16px; width: 270px; ` const NetworkRow = styled(RowBetween)<{ active?: boolean; disabled?: boolean }>` padding: 6px 8px; background-color: ${({ theme, active }) => (active ? theme.bg2 : theme.bg1)}; border-radius: 8px; opacity: ${({ disabled }) => (disabled ? '0.5' : 1)}; :hover { cursor: ${({ disabled }) => (disabled ? 'initial' : 'pointer')}; opacity: ${({ disabled }) => (disabled ? 0.5 : 0.7)}; } ` const Badge = styled.div<{ $bgColor?: string }>` background-color: ${({ theme, $bgColor }) => $bgColor ?? theme.bg4}; border-radius: 6px; padding: 2px 6px; font-size: 12px; font-weight: 600; ` const GreenDot = styled.div` height: 12px; width: 12px; margin-right: 12px; background-color: ${({ theme }) => theme.green1}; border-radius: 50%; position: absolute; border: 2px solid black; right: -16px; bottom: -4px; ` export default function NetworkDropdown() { const [activeNetwork] = useActiveNetworkVersion() const theme = useTheme() const [showMenu, setShowMenu] = useState(false) const node = useRef(null) useOnClickOutside(node, () => setShowMenu(false)) return ( setShowMenu(!showMenu)}> {activeNetwork.name} {[EthereumNetworkInfo, PolygonNetworkInfo, CeloNetworkInfo, BNBNetworkInfo, AvalancheNetworkInfo].includes( activeNetwork, ) ? null : ( L2 )} {showMenu && ( Select network {SUPPORTED_NETWORK_VERSIONS.map((n) => { return ( { setShowMenu(false) }} active={activeNetwork.id === n.id} > {activeNetwork.id === n.id && } {n.name} ) })} )} ) } ================================================ FILE: src/components/Menu/index.tsx ================================================ import React, { useRef, useState } from 'react' import { BookOpen, Code, Info, MessageCircle } from 'react-feather' import styled from 'styled-components' import { ReactComponent as MenuIcon } from '../../assets/images/menu.svg' import { useOnClickOutside } from '../../hooks/useOnClickOutside' import { ExternalLink } from '../../theme' const StyledMenuIcon = styled(MenuIcon)` path { stroke: ${({ theme }) => theme.text1}; } ` const StyledMenuButton = styled.button` width: 100%; height: 100%; border: none; background-color: transparent; margin: 0; padding: 0; height: 35px; background-color: ${({ theme }) => theme.bg3}; padding: 0.15rem 0.5rem; border-radius: 0.5rem; :hover, :focus { cursor: pointer; outline: none; background-color: ${({ theme }) => theme.bg4}; } svg { margin-top: 2px; } ` const StyledMenu = styled.div` margin-left: 0.5rem; display: flex; justify-content: center; align-items: center; position: relative; border: none; text-align: left; ` const MenuFlyout = styled.span` min-width: 8.125rem; background-color: ${({ theme }) => theme.bg3}; box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04), 0px 24px 32px rgba(0, 0, 0, 0.01); border-radius: 12px; padding: 0.5rem; display: flex; flex-direction: column; font-size: 1rem; position: absolute; top: 2.6rem; right: 0rem; z-index: 1000; ` const MenuItem = styled(ExternalLink)` flex: 1; padding: 0.5rem 0.5rem; color: ${({ theme }) => theme.text2}; :hover { color: ${({ theme }) => theme.text1}; cursor: pointer; text-decoration: none; opacity: 0.6; } > svg { margin-right: 8px; } ` const CODE_LINK = 'https://github.com/Uniswap/uniswap-v3-info' export default function Menu() { const node = useRef(null) const [isOpen, setOpen] = useState(false) useOnClickOutside(node, isOpen ? () => setOpen(false) : undefined) return ( setOpen((open) => !open)}> {isOpen && ( About Docs Github Discord )} ) } ================================================ FILE: src/components/Modal/index.tsx ================================================ import React from 'react' import styled, { css } from 'styled-components' import { animated, useTransition, useSpring } from 'react-spring' import { DialogOverlay, DialogContent } from '@reach/dialog' import { isMobile } from 'react-device-detect' import '@reach/dialog/styles.css' import { transparentize } from 'polished' import { useGesture } from 'react-use-gesture' const AnimatedDialogOverlay = animated(DialogOverlay) // eslint-disable-next-line @typescript-eslint/no-unused-vars const StyledDialogOverlay = styled(AnimatedDialogOverlay)` &[data-reach-dialog-overlay] { z-index: 2; background-color: transparent; overflow: hidden; display: flex; align-items: center; justify-content: center; background-color: ${({ theme }) => theme.modalBG}; } ` const AnimatedDialogContent = animated(DialogContent) // destructure to not pass custom props to Dialog DOM element // eslint-disable-next-line @typescript-eslint/no-unused-vars const StyledDialogContent = styled(AnimatedDialogContent)<{ minHeight: number | false maxHeight: number mobile: boolean isOpen?: boolean }>` overflow-y: ${({ mobile }) => (mobile ? 'scroll' : 'hidden')}; &[data-reach-dialog-content] { margin: 0 0 2rem 0; background-color: ${({ theme }) => theme.bg1}; box-shadow: 0 4px 8px 0 ${({ theme }) => transparentize(0.95, theme.shadow1)}; padding: 0px; width: 50vw; overflow-y: ${({ mobile }) => (mobile ? 'scroll' : 'hidden')}; overflow-x: hidden; align-self: ${({ mobile }) => (mobile ? 'flex-end' : 'center')}; max-width: 420px; ${({ maxHeight }) => maxHeight && css` max-height: ${maxHeight}vh; `} ${({ minHeight }) => minHeight && css` min-height: ${minHeight}vh; `} display: flex; border-radius: 20px; ${({ theme }) => theme.mediaWidth.upToMedium` width: 65vw; margin: 0; `} ${({ theme, mobile }) => theme.mediaWidth.upToSmall` width: 85vw; ${ mobile && css` width: 100vw; border-radius: 20px; border-bottom-left-radius: 0; border-bottom-right-radius: 0; ` } `} } ` interface ModalProps { isOpen: boolean onDismiss: () => void minHeight?: number | false maxHeight?: number initialFocusRef?: React.RefObject children?: React.ReactNode } export default function Modal({ isOpen, onDismiss, minHeight = false, maxHeight = 90, initialFocusRef, children, }: ModalProps) { const fadeTransition = useTransition(isOpen, null, { config: { duration: 200 }, from: { opacity: 0 }, enter: { opacity: 1 }, leave: { opacity: 0 }, }) const [{ y }, set] = useSpring(() => ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } })) const bind = useGesture({ onDrag: (state) => { set({ y: state.down ? state.movement[1] : 0, }) if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) { onDismiss() } }, }) return ( <> {fadeTransition.map( ({ item, key, props }) => item && ( `translateY(${(y as number) > 0 ? y : 0}px)`) } : {} } > {/* prevents the automatic focusing of inputs on mobile by the reach dialog */} {!initialFocusRef && isMobile ?
: null} {children} ), )} ) } ================================================ FILE: src/components/NumericalInput/index.tsx ================================================ import React from 'react' import styled from 'styled-components' import { escapeRegExp } from '../../utils' const StyledInput = styled.input<{ error?: boolean; fontSize?: string; align?: string }>` color: ${({ error, theme }) => (error ? theme.red1 : theme.text1)}; width: 0; position: relative; font-weight: 500; outline: none; border: none; flex: 1 1 auto; background-color: ${({ theme }) => theme.bg1}; font-size: ${({ fontSize }) => fontSize ?? '24px'}; text-align: ${({ align }) => align && align}; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding: 0px; -webkit-appearance: textfield; ::-webkit-search-decoration { -webkit-appearance: none; } [type='number'] { -moz-appearance: textfield; } ::-webkit-outer-spin-button, ::-webkit-inner-spin-button { -webkit-appearance: none; } ::placeholder { color: ${({ theme }) => theme.text4}; } ` const inputRegex = RegExp(`^\\d*(?:\\\\[.])?\\d*$`) // match escaped "." characters via in a non-capturing group export const Input = React.memo(function InnerInput({ value, onUserInput, placeholder, prependSymbol, ...rest }: { value: string | number onUserInput: (input: string) => void error?: boolean fontSize?: string align?: 'right' | 'left' prependSymbol?: string | undefined } & Omit, 'ref' | 'onChange' | 'as'>) { const enforcer = (nextUserInput: string) => { if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) { onUserInput(nextUserInput) } } return ( { if (prependSymbol) { const value = event.target.value // cut off prepended symbol const formattedValue = value.toString().includes(prependSymbol) ? value.toString().slice(1, value.toString().length + 1) : value // replace commas with periods, because uniswap exclusively uses period as the decimal separator enforcer(formattedValue.replace(/,/g, '.')) } else { enforcer(event.target.value.replace(/,/g, '.')) } }} // universal input options inputMode="decimal" title="Token Amount" autoComplete="off" autoCorrect="off" // text-specific options type="text" pattern="^[0-9]*[.,]?[0-9]*$" placeholder={placeholder || '0.0'} minLength={1} maxLength={79} spellCheck="false" /> ) }) export default Input // const inputRegex = RegExp(`^\\d*(?:\\\\[.])?\\d*$`) // match escaped "." characters via in a non-capturing group ================================================ FILE: src/components/Percent/index.tsx ================================================ import React from 'react' import { TYPE } from 'theme' import styled from 'styled-components' const Wrapper = styled(TYPE.main)<{ fontWeight: number; fontSize: string; negative: boolean; neutral: boolean }>` font-size: ${({ fontSize }) => fontSize}; font-weight: ${({ fontWeight }) => fontWeight}; color: ${({ theme, negative }) => (negative ? theme.red1 : theme.green1)}; ` export interface LogoProps { value: number | undefined decimals?: number fontSize?: string fontWeight?: number wrap?: boolean simple?: boolean } export default function Percent({ value, decimals = 2, fontSize = '16px', fontWeight = 500, wrap = false, simple = false, ...rest }: LogoProps) { if (value === undefined || value === null) { return ( - ) } const truncated = parseFloat(value.toFixed(decimals)) if (simple) { return ( {Math.abs(value).toFixed(decimals)}% ) } return ( {wrap && '('} {truncated < 0 && '↓'} {truncated > 0 && '↑'} {Math.abs(value).toFixed(decimals)}%{wrap && ')'} ) } ================================================ FILE: src/components/Popover/index.tsx ================================================ import { Placement } from '@popperjs/core' import { transparentize } from 'polished' import React, { useCallback, useState } from 'react' import { usePopper } from 'react-popper' import styled from 'styled-components' import useInterval from '../../hooks/useInterval' import Portal from '@reach/portal' const PopoverContainer = styled.div<{ $show: boolean }>` z-index: 9999; visibility: ${(props) => (props.$show ? 'visible' : 'hidden')}; opacity: ${(props) => (props.$show ? 1 : 0)}; transition: visibility 150ms linear, opacity 150ms linear; background: ${({ theme }) => theme.bg2}; border: 1px solid ${({ theme }) => theme.bg3}; box-shadow: 0 4px 8px 0 ${({ theme }) => transparentize(0.9, theme.shadow1)}; color: ${({ theme }) => theme.text2}; border-radius: 8px; ` const ReferenceElement = styled.div` display: inline-block; ` const Arrow = styled.div` width: 8px; height: 8px; z-index: 9998; ::before { position: absolute; width: 8px; height: 8px; z-index: 9998; content: ''; border: 1px solid ${({ theme }) => theme.bg3}; transform: rotate(45deg); background: ${({ theme }) => theme.bg2}; } &.arrow-top { bottom: -5px; ::before { border-top: none; border-left: none; } } &.arrow-bottom { top: -5px; ::before { border-bottom: none; border-right: none; } } &.arrow-left { right: -5px; ::before { border-bottom: none; border-left: none; } } &.arrow-right { left: -5px; ::before { border-right: none; border-top: none; } } ` export interface PopoverProps { content: React.ReactNode show: boolean children: React.ReactNode placement?: Placement } export default function Popover({ content, show, children, placement = 'auto' }: PopoverProps) { const [referenceElement, setReferenceElement] = useState(null) const [popperElement, setPopperElement] = useState(null) const [arrowElement, setArrowElement] = useState(null) const { styles, update, attributes } = usePopper(referenceElement, popperElement, { placement, strategy: 'fixed', modifiers: [ { name: 'offset', options: { offset: [8, 8] } }, { name: 'arrow', options: { element: arrowElement } }, ], }) const updateCallback = useCallback(() => { update && update() }, [update]) useInterval(updateCallback, show ? 100 : null) return ( <> {children} {content} ) } ================================================ FILE: src/components/Popups/ListUpdatePopup.tsx ================================================ import { diffTokenLists, TokenList } from '@uniswap/token-lists' import React, { useCallback, useMemo } from 'react' import { useDispatch } from 'react-redux' import { Text } from 'rebass' import styled from 'styled-components' import { AppDispatch } from '../../state' import { useRemovePopup } from '../../state/application/hooks' import { acceptListUpdate } from '../../state/lists/actions' import { TYPE } from '../../theme' import listVersionLabel from '../../utils/listVersionLabel' import { ButtonSecondary } from '../Button' import { AutoColumn } from '../Column' import { AutoRow } from '../Row' export const ChangesList = styled.ul` max-height: 400px; overflow: auto; ` export default function ListUpdatePopup({ popKey, listUrl, oldList, newList, auto, }: { popKey: string listUrl: string oldList: TokenList newList: TokenList auto: boolean }) { const removePopup = useRemovePopup() const removeThisPopup = useCallback(() => removePopup(popKey), [popKey, removePopup]) const dispatch = useDispatch() const handleAcceptUpdate = useCallback(() => { if (auto) return dispatch(acceptListUpdate(listUrl)) removeThisPopup() }, [auto, dispatch, listUrl, removeThisPopup]) const { added: tokensAdded, changed: tokensChanged, removed: tokensRemoved, } = useMemo(() => { return diffTokenLists(oldList.tokens, newList.tokens) }, [newList.tokens, oldList.tokens]) const numTokensChanged = useMemo( () => Object.keys(tokensChanged).reduce((memo, chainId: any) => memo + Object.keys(tokensChanged[chainId]).length, 0), [tokensChanged], ) return ( {auto ? ( The token list "{oldList.name}" has been updated to{' '} {listVersionLabel(newList.version)}. ) : ( <>
An update is available for the token list "{oldList.name}" ( {listVersionLabel(oldList.version)} to {listVersionLabel(newList.version)}). {tokensAdded.length > 0 ? (
  • {tokensAdded.map((token, i) => ( {token.symbol} {i === tokensAdded.length - 1 ? null : ', '} ))}{' '} added
  • ) : null} {tokensRemoved.length > 0 ? (
  • {tokensRemoved.map((token, i) => ( {token.symbol} {i === tokensRemoved.length - 1 ? null : ', '} ))}{' '} removed
  • ) : null} {numTokensChanged > 0 ?
  • {numTokensChanged} tokens updated
  • : null}
    Accept update
    Dismiss
    )}
    ) } ================================================ FILE: src/components/Popups/PopupItem.tsx ================================================ import React, { useCallback, useContext, useEffect } from 'react' import { X } from 'react-feather' import { useSpring } from 'react-spring/web' import styled, { ThemeContext } from 'styled-components' import { animated } from 'react-spring' import { PopupContent } from '../../state/application/actions' import { useRemovePopup } from '../../state/application/hooks' import ListUpdatePopup from './ListUpdatePopup' export const StyledClose = styled(X)` position: absolute; right: 10px; top: 10px; :hover { cursor: pointer; } ` export const Popup = styled.div` display: inline-block; width: 100%; padding: 1em; background-color: ${({ theme }) => theme.bg1}; position: relative; border-radius: 10px; padding: 20px; padding-right: 35px; overflow: hidden; ${({ theme }) => theme.mediaWidth.upToSmall` min-width: 290px; &:not(:last-of-type) { margin-right: 20px; } `} ` const Fader = styled.div` position: absolute; bottom: 0px; left: 0px; width: 100%; height: 2px; background-color: ${({ theme }) => theme.bg3}; ` const AnimatedFader = animated(Fader) export default function PopupItem({ removeAfterMs, content, popKey, }: { removeAfterMs: number | null content: PopupContent popKey: string }) { const removePopup = useRemovePopup() const removeThisPopup = useCallback(() => removePopup(popKey), [popKey, removePopup]) useEffect(() => { if (removeAfterMs === null) return undefined const timeout = setTimeout(() => { removeThisPopup() }, removeAfterMs) return () => { clearTimeout(timeout) } }, [removeAfterMs, removeThisPopup]) const theme = useContext(ThemeContext) let popupContent if ('listUpdate' in content) { const { listUpdate: { listUrl, oldList, newList, auto }, } = content popupContent = } const faderStyle = useSpring({ from: { width: '100%' }, to: { width: '0%' }, config: { duration: removeAfterMs ?? undefined }, }) return ( {popupContent} {removeAfterMs !== null ? : null} ) } ================================================ FILE: src/components/Popups/index.tsx ================================================ import React from 'react' import styled from 'styled-components' import { useActivePopups } from '../../state/application/hooks' import { AutoColumn } from '../Column' import PopupItem from './PopupItem' import { useURLWarningVisible } from '../../state/user/hooks' const MobilePopupWrapper = styled.div<{ height: string | number }>` position: relative; max-width: 100%; height: ${({ height }) => height}; margin: ${({ height }) => (height ? '0 auto;' : 0)}; margin-bottom: ${({ height }) => (height ? '20px' : 0)}; display: none; ${({ theme }) => theme.mediaWidth.upToSmall` display: block; `}; ` const MobilePopupInner = styled.div` height: 99%; overflow-x: auto; overflow-y: hidden; display: flex; flex-direction: row; -webkit-overflow-scrolling: touch; ::-webkit-scrollbar { display: none; } ` const FixedPopupColumn = styled(AutoColumn)<{ $extraPadding: boolean }>` position: fixed; top: ${({ $extraPadding }) => ($extraPadding ? '108px' : '88px')}; right: 1rem; max-width: 355px !important; width: 100%; z-index: 3; ${({ theme }) => theme.mediaWidth.upToSmall` display: none; `}; ` export default function Popups() { // get all popups const activePopups = useActivePopups() const urlWarningActive = useURLWarningVisible() return ( <> {activePopups.map((item) => ( ))} 0 ? 'fit-content' : 0}> {activePopups // reverse so new items up front .slice(0) .reverse() .map((item) => ( ))} ) } ================================================ FILE: src/components/QuestionHelper/index.tsx ================================================ import React, { useCallback, useState } from 'react' import { HelpCircle as Question } from 'react-feather' import styled from 'styled-components' import Tooltip from '../Tooltip' const QuestionWrapper = styled.div` display: flex; align-items: center; justify-content: center; padding: 0.2rem; border: none; background: none; outline: none; cursor: default; border-radius: 36px; background-color: ${({ theme }) => theme.bg2}; color: ${({ theme }) => theme.text2}; :hover, :focus { opacity: 0.7; } ` const LightQuestionWrapper = styled.div` display: flex; align-items: center; justify-content: center; padding: 0.2rem; border: none; background: none; outline: none; cursor: default; border-radius: 36px; width: 24px; height: 24px; background-color: rgba(255, 255, 255, 0.1); color: ${({ theme }) => theme.white}; :hover, :focus { opacity: 0.7; } ` const QuestionMark = styled.span` font-size: 1rem; ` export default function QuestionHelper({ text }: { text: string }) { const [show, setShow] = useState(false) const open = useCallback(() => setShow(true), [setShow]) const close = useCallback(() => setShow(false), [setShow]) return ( ) } export function LightQuestionHelper({ text }: { text: string }) { const [show, setShow] = useState(false) const open = useCallback(() => setShow(true), [setShow]) const close = useCallback(() => setShow(false), [setShow]) return ( ? ) } ================================================ FILE: src/components/Row/index.tsx ================================================ import styled from 'styled-components' import { Box } from 'rebass/styled-components' const Row = styled(Box)<{ width?: string align?: string justify?: string padding?: string border?: string borderRadius?: string gap?: string }>` width: ${({ width }) => width ?? '100%'}; display: flex; padding: 0; align-items: ${({ align }) => align ?? 'center'}; justify-content: ${({ justify }) => justify ?? 'flex-start'}; padding: ${({ padding }) => padding}; border: ${({ border }) => border}; border-radius: ${({ borderRadius }) => borderRadius}; gap: ${({ gap }) => gap}; ` export const RowBetween = styled(Row)` justify-content: space-between; ` export const RowFlat = styled.div` display: flex; align-items: flex-end; ` export const AutoRow = styled(Row)<{ $gap?: string; justify?: string }>` flex-wrap: wrap; margin: ${({ $gap }) => $gap && `-${$gap}`}; justify-content: ${({ justify }) => justify && justify}; & > * { margin: ${({ $gap }) => $gap} !important; } ` export const RowFixed = styled(Row)<{ gap?: string; justify?: string }>` width: fit-content; margin: ${({ gap }) => gap && `-${gap}`}; ` export const ResponsiveRow = styled(RowBetween)` ${({ theme }) => theme.mediaWidth.upToSmall` flex-direction: column; row-gap: 1rem; `}; ` export default Row ================================================ FILE: src/components/Search/index.tsx ================================================ import React, { useRef, useCallback, useState, useEffect, useMemo } from 'react' import styled from 'styled-components' import Row, { RowFixed } from 'components/Row' import { HideSmall, TYPE } from 'theme' import Hotkeys from 'react-hot-keys' import { useFetchSearchResults } from 'data/search' import { AutoColumn } from 'components/Column' import CurrencyLogo from 'components/CurrencyLogo' import { formatDollarAmount } from 'utils/numbers' import DoubleCurrencyLogo from 'components/DoubleLogo' import { GreyBadge } from 'components/Card' import { feeTierPercent } from 'utils' import { useSavedTokens, useSavedPools } from 'state/user/hooks' import { SavedIcon } from 'components/Button' import { useTokenDatas } from 'state/tokens/hooks' import { usePoolDatas } from 'state/pools/hooks' import HoverInlineText from 'components/HoverInlineText' import { TOKEN_HIDE, POOL_HIDE } from '../../constants/index' import { useActiveNetworkVersion } from 'state/application/hooks' import { networkPrefix } from 'utils/networkPrefix' import { useNavigate } from 'react-router-dom' const Container = styled.div` position: relative; z-index: 30; width: 100%; ` const Wrapper = styled(Row)` background-color: ${({ theme }) => theme.black}; padding: 10px 16px; width: 500px; height: 38px; border-radius: 20px; position: relative; z-index: 9999; @media (max-width: 1080px) { width: 100%; } ` const StyledInput = styled.input` position: relative; display: flex; align-items: center; white-space: nowrap; background: none; border: none; width: 100%; font-size: 16px; outline: none; color: ${({ theme }) => theme.text1}; ::placeholder { color: ${({ theme }) => theme.text3}; font-size: 16px; } @media screen and (max-width: 640px) { ::placeholder { font-size: 1rem; } } ` const Menu = styled.div<{ $hide: boolean }>` display: flex; flex-direction: column; z-index: 9999; width: 800px; top: 50px; max-height: 600px; overflow: auto; right: 0; padding: 1.5rem; padding-bottom: 1.5rem; position: absolute; background: ${({ theme }) => theme.bg0}; border-radius: 8px; box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.04), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04), 0px 24px 32px rgba(0, 0, 0, 0.04); display: ${({ $hide }) => $hide && 'none'}; border: 1px solid ${({ theme }) => theme.pink1}; ${({ theme }) => theme.mediaWidth.upToMedium` position: absolute; margin-top: 4px; z-index: 9999; width: 100%; max-height: 400px; `}; ` const Blackout = styled.div` position: absolute; min-height: 100vh; width: 100vw; z-index: -40; background-color: black; opacity: 0.7; left: 0; top: 0; ` const ResponsiveGrid = styled.div` display: grid; grid-gap: 1em; grid-template-columns: 1.5fr repeat(3, 1fr); align-items: center; ${({ theme }) => theme.mediaWidth.upToSmall` grid-template-columns: 1fr; `}; ` const Break = styled.div` height: 1px; background-color: ${({ theme }) => theme.bg1}; width: 100%; ` const HoverText = styled.div<{ $hide?: boolean | undefined }>` color: ${({ theme }) => theme.blue1}; display: ${({ $hide = false }) => $hide && 'none'}; :hover { cursor: pointer; opacity: 0.6; } ` const HoverRowLink = styled.div` :hover { cursor: pointer; opacity: 0.6; } ` const OptionButton = styled.div<{ $enabled: boolean }>` width: fit-content; padding: 4px 8px; border-radius: 8px; display: flex; font-size: 12px; font-weight: 600; margin-right: 10px; justify-content: center; align-items: center; background-color: ${({ theme, $enabled }) => ($enabled ? theme.pink1 : 'transparent')}; color: ${({ theme, $enabled }) => ($enabled ? theme.white : theme.pink1)}; :hover { opacity: 0.6; cursor: pointer; } ` const Search = ({ ...rest }: React.HTMLAttributes) => { const navigate = useNavigate() const [activeNetwork] = useActiveNetworkVersion() const ref = useRef(null) const menuRef = useRef(null) const textRef = useRef(null) const handleDown = useCallback(() => { if (ref != null && ref.current !== null) { ref.current.focus() } }, []) const [focused, setFocused] = useState(false) const [showMenu, setShowMenu] = useState(false) const [value, setValue] = useState('') const { tokens, pools } = useFetchSearchResults(value) useEffect(() => { if (value !== '') { setFocused(true) } else { setFocused(false) } }, [value]) const [tokensShown, setTokensShown] = useState(3) const [poolsShown, setPoolsShown] = useState(3) const handleClick = (e: any) => { if (!(menuRef.current && menuRef.current.contains(e.target)) && !(ref.current && ref.current.contains(e.target))) { setPoolsShown(3) setTokensShown(3) setShowMenu(false) } } useEffect(() => { document.addEventListener('click', handleClick) return () => { document.removeEventListener('click', handleClick) } }) // watchlist const [savedTokens, addSavedToken] = useSavedTokens() const [savedPools, addSavedPool] = useSavedPools() const handleNav = (to: string) => { setShowMenu(false) setPoolsShown(3) setTokensShown(3) navigate(to) } // get date for watchlist const watchListTokenData = useTokenDatas(savedTokens) const watchListPoolData = usePoolDatas(savedPools) // filter on view const [showWatchlist, setShowWatchlist] = useState(false) const tokensForList = useMemo( () => (showWatchlist ? watchListTokenData ?? [] : tokens.sort((t0, t1) => (t0.volumeUSD > t1.volumeUSD ? -1 : 1))), [showWatchlist, tokens, watchListTokenData], ) const poolForList = useMemo( () => (showWatchlist ? watchListPoolData ?? [] : pools.sort((p0, p1) => (p0.volumeUSD > p1.volumeUSD ? -1 : 1))), [pools, showWatchlist, watchListPoolData], ) return ( {showMenu ? : null} { setValue(e.target.value) }} placeholder="Search pools or tokens" ref={ref} onFocus={() => { setFocused(true) setShowMenu(true) }} onBlur={() => setFocused(false)} /> {!focused && ⌘/} setShowWatchlist(false)}> Search setShowWatchlist(true)}> Watchlist Tokens Volume 24H TVL Price {tokensForList .filter((t) => !TOKEN_HIDE[activeNetwork.id].includes(t.address)) .slice(0, tokensShown) .map((t, i) => { return ( handleNav(networkPrefix(activeNetwork) + 'tokens/' + t.address)} key={i}> {' '} { e.stopPropagation() addSavedToken(t.address) }} /> {formatDollarAmount(t.volumeUSD)} {formatDollarAmount(t.tvlUSD)} {formatDollarAmount(t.priceUSD)} ) })} {tokensForList.length === 0 ? ( {showWatchlist ? 'Saved tokens will appear here' : 'No results'} ) : null} { setTokensShown(tokensShown + 5) }} $hide={!(tokensForList.length > 3 && tokensForList.length >= tokensShown)} ref={textRef} > See more... Pools Volume 24H TVL Price {poolForList .filter((p) => !POOL_HIDE[activeNetwork.id].includes(p.address)) .slice(0, poolsShown) .map((p, i) => { return ( handleNav(networkPrefix(activeNetwork) + 'pools/' + p.address)} key={i}> {feeTierPercent(p.feeTier)} { e.stopPropagation() addSavedPool(p.address) }} /> {formatDollarAmount(p.volumeUSD)} {formatDollarAmount(p.tvlUSD)} {formatDollarAmount(p.token0Price)} ) })} {poolForList.length === 0 ? ( {showWatchlist ? 'Saved pools will appear here' : 'No results'} ) : null} { setPoolsShown(poolsShown + 5) }} $hide={!(poolForList.length > 3 && poolForList.length >= poolsShown)} ref={textRef} > See more... ) } export default Search ================================================ FILE: src/components/Text/index.ts ================================================ import styled from 'styled-components' import { TYPE } from 'theme' // responsive text export const Label = styled(TYPE.label)<{ end?: number }>` display: flex; font-size: 16px; font-weight: 400; justify-content: ${({ end }) => (end ? 'flex-end' : 'flex-start')}; align-items: center; font-variant-numeric: tabular-nums; @media screen and (max-width: 640px) { font-size: 14px; } ` export const ClickableText = styled(Label)` text-align: end; &:hover { cursor: pointer; opacity: 0.6; } user-select: none; @media screen and (max-width: 640px) { font-size: 12px; } ` ================================================ FILE: src/components/Toggle/ListToggle.tsx ================================================ import React from 'react' import styled from 'styled-components' import { TYPE } from '../../theme' const Wrapper = styled.button<{ isActive?: boolean; activeElement?: boolean }>` border-radius: 20px; border: none; background: ${({ theme }) => theme.bg1}; display: flex; width: fit-content; cursor: pointer; outline: none; padding: 0.4rem 0.4rem; align-items: center; ` const ToggleElement = styled.span<{ isActive?: boolean; bgColor?: string }>` border-radius: 50%; height: 24px; width: 24px; background-color: ${({ isActive, bgColor, theme }) => (isActive ? bgColor : theme.bg4)}; :hover { opacity: 0.8; } ` const StatusText = styled(TYPE.main)<{ isActive?: boolean }>` margin: 0 10px; width: 24px; color: ${({ theme, isActive }) => (isActive ? theme.text1 : theme.text3)}; ` export interface ToggleProps { id?: string isActive: boolean bgColor: string toggle: () => void } export default function ListToggle({ id, isActive, bgColor, toggle }: ToggleProps) { return ( {isActive && ( ON )} {!isActive && ( OFF )} ) } ================================================ FILE: src/components/Toggle/MultiToggle.tsx ================================================ import React from 'react' import styled from 'styled-components' export const ToggleWrapper = styled.button<{ width?: string }>` display: flex; align-items: center; width: ${({ width }) => width ?? '100%'} padding: 1px; background: ${({ theme }) => theme.bg0}; border-radius: 8px; border: ${({ theme }) => '2px solid ' + theme.bg2}; cursor: pointer; outline: none; ` export const ToggleElement = styled.span<{ isActive?: boolean; fontSize?: string }>` display: flex; align-items: center; width: 100%; padding: 4px 0.5rem; border-radius: 6px; justify-content: center; height: 100%; background: ${({ theme, isActive }) => (isActive ? theme.bg2 : 'none')}; color: ${({ theme, isActive }) => (isActive ? theme.text1 : theme.text3)}; font-size: ${({ fontSize }) => fontSize ?? '1rem'}; font-weight: 500; :hover { user-select: initial; color: ${({ theme, isActive }) => (isActive ? theme.text2 : theme.text3)}; } ` export interface ToggleProps { options: string[] activeIndex: number toggle: (index: number) => void id?: string width?: string } export default function MultiToggle({ id, options, activeIndex, toggle, width }: ToggleProps) { return ( {options.map((option, index) => ( toggle(index)}> {option} ))} ) } ================================================ FILE: src/components/Toggle/index.tsx ================================================ import React from 'react' import styled from 'styled-components' const ToggleElement = styled.span<{ isActive?: boolean; isOnSwitch?: boolean }>` padding: 0.25rem 0.5rem; border-radius: 14px; background: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.primary1 : theme.text4) : 'none')}; color: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.white : theme.text2) : theme.text3)}; font-size: 1rem; font-weight: 400; padding: 0.35rem 0.6rem; border-radius: 12px; background: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.primary1 : theme.text4) : 'none')}; color: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.white : theme.text2) : theme.text2)}; font-size: 1rem; font-weight: ${({ isOnSwitch }) => (isOnSwitch ? '500' : '400')}; :hover { user-select: ${({ isOnSwitch }) => (isOnSwitch ? 'none' : 'initial')}; background: ${({ theme, isActive, isOnSwitch }) => isActive ? (isOnSwitch ? theme.primary1 : theme.text3) : 'none'}; color: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.white : theme.text2) : theme.text3)}; } ` const StyledToggle = styled.button<{ isActive?: boolean; activeElement?: boolean }>` border-radius: 12px; border: none; background: ${({ theme }) => theme.bg3}; display: flex; width: fit-content; cursor: pointer; outline: none; padding: 0; ` export interface ToggleProps { id?: string isActive: boolean toggle: () => void } export default function Toggle({ id, isActive, toggle }: ToggleProps) { return ( On Off ) } export const ToggleWrapper = styled.button<{ width?: string }>` display: flex; align-items: center; width: ${({ width }) => width ?? '100%'} padding: 1px; background: ${({ theme }) => theme.bg2}; border-radius: 12px; border: ${({ theme }) => '2px solid ' + theme.bg2}; cursor: pointer; outline: none; color: ${({ theme }) => theme.text2}; ` export const ToggleElementFree = styled.span<{ isActive?: boolean; fontSize?: string }>` display: flex; align-items: center; width: 100%; padding: 2px 10px; border-radius: 12px; justify-content: center; height: 100%; background: ${({ theme, isActive }) => (isActive ? theme.black : 'none')}; color: ${({ theme, isActive }) => (isActive ? theme.text1 : theme.text2)}; font-size: ${({ fontSize }) => fontSize ?? '1rem'}; font-weight: 600; white-space: nowrap; :hover { user-select: initial; color: ${({ theme, isActive }) => (isActive ? theme.text2 : theme.text3)}; } margin-top: 0.5px; ` ================================================ FILE: src/components/Tooltip/index.tsx ================================================ import React, { useCallback, useState } from 'react' import styled from 'styled-components' import Popover, { PopoverProps } from '../Popover' const TooltipContainer = styled.div` width: 228px; padding: 0.6rem 1rem; line-height: 150%; font-weight: 400; ` interface TooltipProps extends Omit { text: string } export default function Tooltip({ text, ...rest }: TooltipProps) { return {text}} {...rest} /> } export function MouseoverTooltip({ children, ...rest }: Omit) { const [show, setShow] = useState(false) const open = useCallback(() => setShow(true), [setShow]) const close = useCallback(() => setShow(false), [setShow]) return (
    {children}
    ) } ================================================ FILE: src/components/TransactionsTable/index.tsx ================================================ import React, { useCallback, useState, useMemo, useEffect } from 'react' import styled from 'styled-components' import { DarkGreyCard } from 'components/Card' import Loader from 'components/Loader' import { AutoColumn } from 'components/Column' import { formatDollarAmount, formatAmount } from 'utils/numbers' import { shortenAddress, getExplorerLink, ExplorerDataType } from 'utils' import { Label, ClickableText } from 'components/Text' import { Transaction, TransactionType } from 'types' import { formatTime } from 'utils/date' import { RowFixed } from 'components/Row' import { ExternalLink, TYPE } from 'theme' import { PageButtons, Arrow, Break } from 'components/shared' import useTheme from 'hooks/useTheme' import HoverInlineText from 'components/HoverInlineText' import { useActiveNetworkVersion } from 'state/application/hooks' import { OptimismNetworkInfo } from 'constants/networks' import { ChainId } from '@uniswap/sdk-core' const Wrapper = styled(DarkGreyCard)` width: 100%; ` const ResponsiveGrid = styled.div` display: grid; grid-gap: 1em; align-items: center; grid-template-columns: 1.5fr repeat(5, 1fr); @media screen and (max-width: 940px) { grid-template-columns: 1.5fr repeat(4, 1fr); & > *:nth-child(5) { display: none; } } @media screen and (max-width: 800px) { grid-template-columns: 1.5fr repeat(2, 1fr); & > *:nth-child(5) { display: none; } & > *:nth-child(3) { display: none; } & > *:nth-child(4) { display: none; } } @media screen and (max-width: 500px) { grid-template-columns: 1.5fr repeat(1, 1fr); & > *:nth-child(5) { display: none; } & > *:nth-child(3) { display: none; } & > *:nth-child(4) { display: none; } & > *:nth-child(2) { display: none; } } ` const SortText = styled.button<{ $active: boolean }>` cursor: pointer; font-weight: ${({ $active }) => ($active ? 500 : 400)}; margin-right: 0.75rem !important; border: none; background-color: transparent; font-size: 1rem; padding: 0px; color: ${({ $active, theme }) => ($active ? theme.text1 : theme.text3)}; outline: none; @media screen and (max-width: 600px) { font-size: 14px; } ` const SORT_FIELD = { amountUSD: 'amountUSD', timestamp: 'timestamp', sender: 'sender', amountToken0: 'amountToken0', amountToken1: 'amountToken1', } const DataRow = ({ transaction, color }: { transaction: Transaction; color?: string }) => { const abs0 = Math.abs(transaction.amountToken0) const abs1 = Math.abs(transaction.amountToken1) const outputTokenSymbol = transaction.amountToken0 < 0 ? transaction.token0Symbol : transaction.token1Symbol const inputTokenSymbol = transaction.amountToken1 < 0 ? transaction.token0Symbol : transaction.token1Symbol const [activeNetwork] = useActiveNetworkVersion() const theme = useTheme() return ( ) } export default function TransactionTable({ transactions, maxItems = 10, color, }: { transactions: Transaction[] maxItems?: number color?: string }) { // theming const theme = useTheme() // for sorting const [sortField, setSortField] = useState(SORT_FIELD.timestamp) const [sortDirection, setSortDirection] = useState(true) // pagination const [page, setPage] = useState(1) const [maxPage, setMaxPage] = useState(1) useEffect(() => { let extraPages = 1 if (transactions.length % maxItems === 0) { extraPages = 0 } setMaxPage(Math.floor(transactions.length / maxItems) + extraPages) }, [maxItems, transactions]) // filter on txn type const [txFilter, setTxFilter] = useState(undefined) const sortedTransactions = useMemo(() => { return transactions ? transactions .slice() .sort((a, b) => { if (a && b) { return a[sortField as keyof Transaction] > b[sortField as keyof Transaction] ? (sortDirection ? -1 : 1) * 1 : (sortDirection ? -1 : 1) * -1 } else { return -1 } }) .filter((x) => { return txFilter === undefined || x.type === txFilter }) .slice(maxItems * (page - 1), page * maxItems) : [] }, [transactions, maxItems, page, sortField, sortDirection, txFilter]) const handleSort = useCallback( (newField: string) => { setSortField(newField) setSortDirection(sortField !== newField ? true : !sortDirection) }, [sortDirection, sortField], ) const arrow = useCallback( (field: string) => { return sortField === field ? (!sortDirection ? '↑' : '↓') : '' }, [sortDirection, sortField], ) if (!transactions) { return } return ( { setTxFilter(undefined) }} $active={txFilter === undefined} > All { setTxFilter(TransactionType.SWAP) }} $active={txFilter === TransactionType.SWAP} > Swaps { setTxFilter(TransactionType.MINT) }} $active={txFilter === TransactionType.MINT} > Adds { setTxFilter(TransactionType.BURN) }} $active={txFilter === TransactionType.BURN} > Removes handleSort(SORT_FIELD.amountUSD)} end={1}> Total Value {arrow(SORT_FIELD.amountUSD)} handleSort(SORT_FIELD.amountToken0)}> Token Amount {arrow(SORT_FIELD.amountToken0)} handleSort(SORT_FIELD.amountToken1)}> Token Amount {arrow(SORT_FIELD.amountToken1)} handleSort(SORT_FIELD.sender)}> Account {arrow(SORT_FIELD.sender)} handleSort(SORT_FIELD.timestamp)}> Time {arrow(SORT_FIELD.timestamp)} {sortedTransactions.map((t, i) => { if (t) { return ( ) } return null })} {sortedTransactions.length === 0 ? No Transactions : undefined}
    { setPage(page === 1 ? page : page - 1) }} >
    {'Page ' + page + ' of ' + maxPage}
    { setPage(page === maxPage ? page : page + 1) }} >
    ) } ================================================ FILE: src/components/pools/PoolTable.tsx ================================================ import React, { useCallback, useState, useMemo, useEffect } from 'react' import styled from 'styled-components' import { Link } from 'react-router-dom' import { TYPE } from 'theme' import { DarkGreyCard, GreyBadge } from 'components/Card' import Loader, { LoadingRows } from 'components/Loader' import { AutoColumn } from 'components/Column' import { RowFixed } from 'components/Row' import { formatDollarAmount } from 'utils/numbers' import { PoolData } from 'state/pools/reducer' import DoubleCurrencyLogo from 'components/DoubleLogo' import { feeTierPercent } from 'utils' import { Label, ClickableText } from 'components/Text' import { PageButtons, Arrow, Break } from 'components/shared' import { POOL_HIDE } from '../../constants/index' import useTheme from 'hooks/useTheme' import { networkPrefix } from 'utils/networkPrefix' import { useActiveNetworkVersion } from 'state/application/hooks' const Wrapper = styled(DarkGreyCard)` width: 100%; ` const ResponsiveGrid = styled.div` display: grid; grid-gap: 1em; align-items: center; grid-template-columns: 20px 3.5fr repeat(3, 1fr); @media screen and (max-width: 900px) { grid-template-columns: 20px 1.5fr repeat(2, 1fr); & :nth-child(3) { display: none; } } @media screen and (max-width: 500px) { grid-template-columns: 20px 1.5fr repeat(1, 1fr); & :nth-child(5) { display: none; } } @media screen and (max-width: 480px) { grid-template-columns: 2.5fr repeat(1, 1fr); > *:nth-child(1) { display: none; } } ` const LinkWrapper = styled(Link)` text-decoration: none; :hover { cursor: pointer; opacity: 0.7; } ` const SORT_FIELD = { feeTier: 'feeTier', volumeUSD: 'volumeUSD', tvlUSD: 'tvlUSD', volumeUSDWeek: 'volumeUSDWeek', } const DataRow = ({ poolData, index }: { poolData: PoolData; index: number }) => { const [activeNetwork] = useActiveNetworkVersion() return ( ) } const MAX_ITEMS = 10 export default function PoolTable({ poolDatas, maxItems = MAX_ITEMS }: { poolDatas: PoolData[]; maxItems?: number }) { const [currentNetwork] = useActiveNetworkVersion() // theming const theme = useTheme() // for sorting const [sortField, setSortField] = useState(SORT_FIELD.tvlUSD) const [sortDirection, setSortDirection] = useState(true) // pagination const [page, setPage] = useState(1) const [maxPage, setMaxPage] = useState(1) useEffect(() => { let extraPages = 1 if (poolDatas.length % maxItems === 0) { extraPages = 0 } setMaxPage(Math.floor(poolDatas.length / maxItems) + extraPages) }, [maxItems, poolDatas]) const sortedPools = useMemo(() => { return poolDatas ? poolDatas .filter((x) => !!x && !POOL_HIDE[currentNetwork.id].includes(x.address)) .sort((a, b) => { if (a && b) { return a[sortField as keyof PoolData] > b[sortField as keyof PoolData] ? (sortDirection ? -1 : 1) * 1 : (sortDirection ? -1 : 1) * -1 } else { return -1 } }) .slice(maxItems * (page - 1), page * maxItems) : [] }, [currentNetwork.id, maxItems, page, poolDatas, sortDirection, sortField]) const handleSort = useCallback( (newField: string) => { setSortField(newField) setSortDirection(sortField !== newField ? true : !sortDirection) }, [sortDirection, sortField], ) const arrow = useCallback( (field: string) => { return sortField === field ? (!sortDirection ? '↑' : '↓') : '' }, [sortDirection, sortField], ) if (!poolDatas) { return } return ( {sortedPools.length > 0 ? ( handleSort(SORT_FIELD.feeTier)}> Pool {arrow(SORT_FIELD.feeTier)} handleSort(SORT_FIELD.tvlUSD)}> TVL {arrow(SORT_FIELD.tvlUSD)} handleSort(SORT_FIELD.volumeUSD)}> Volume 24H {arrow(SORT_FIELD.volumeUSD)} handleSort(SORT_FIELD.volumeUSDWeek)}> Volume 7D {arrow(SORT_FIELD.volumeUSDWeek)} {sortedPools.map((poolData, i) => { if (poolData) { return ( ) } return null })}
    { setPage(page === 1 ? page : page - 1) }} >
    {'Page ' + page + ' of ' + maxPage}
    { setPage(page === maxPage ? page : page + 1) }} >
    ) : (
    )} ) } ================================================ FILE: src/components/pools/TopPoolMovers.tsx ================================================ import React, { useMemo } from 'react' import styled from 'styled-components' import { ScrollableX, GreyCard, GreyBadge } from 'components/Card' import Loader from 'components/Loader' import { AutoColumn } from 'components/Column' import { RowFixed } from 'components/Row' import { TYPE, StyledInternalLink } from 'theme' import { formatDollarAmount } from 'utils/numbers' import Percent from 'components/Percent' import { useAllPoolData } from 'state/pools/hooks' import { PoolData } from 'state/pools/reducer' import DoubleCurrencyLogo from 'components/DoubleLogo' import HoverInlineText from 'components/HoverInlineText' import { feeTierPercent } from 'utils' const Container = styled(StyledInternalLink)` min-width: 210px; margin-right: 16px; :hover { cursor: pointer; opacity: 0.6; } ` const Wrapper = styled(GreyCard)` padding: 12px; ` const DataCard = ({ poolData }: { poolData: PoolData }) => { return ( {feeTierPercent(poolData.feeTier)} {formatDollarAmount(poolData.volumeUSD)} ) } export default function TopPoolMovers() { const allPools = useAllPoolData() const topVolume = useMemo(() => { return Object.values(allPools) .sort(({ data: a }, { data: b }) => { return a && b ? (a?.volumeUSDChange > b?.volumeUSDChange ? -1 : 1) : -1 }) .slice(0, Math.min(20, Object.values(allPools).length)) }, [allPools]) if (Object.keys(allPools).length === 0) { return } return ( {topVolume.map((entry) => entry.data ? : null, )} ) } ================================================ FILE: src/components/shared/index.tsx ================================================ import styled from 'styled-components' export const PageButtons = styled.div` width: 100%; display: flex; align-items: center; justify-content: center; margin-top: 0.2em; margin-bottom: 0.5em; ` export const Arrow = styled.div<{ $faded: boolean }>` color: ${({ theme }) => theme.primary1}; opacity: ${(props) => (props.$faded ? 0.3 : 1)}; padding: 0 20px; user-select: none; :hover { cursor: pointer; } ` export const Break = styled.div` height: 1px; background-color: ${({ theme }) => theme.bg1}; width: 100%; ` export const FixedSpan = styled.span<{ width?: string | null }>` width: ${({ width }) => width ?? ''}; ` export const MonoSpace = styled.span` font-variant-numeric: tabular-nums; ` ================================================ FILE: src/components/tokens/TokenTable.tsx ================================================ import React, { useState, useMemo, useCallback, useEffect } from 'react' import styled from 'styled-components' import { ExtraSmallOnly, HideExtraSmall, TYPE } from 'theme' import { DarkGreyCard } from 'components/Card' import { TokenData } from '../../state/tokens/reducer' import Loader, { LoadingRows } from 'components/Loader' import { Link } from 'react-router-dom' import { AutoColumn } from 'components/Column' import CurrencyLogo from 'components/CurrencyLogo' import { RowFixed } from 'components/Row' import { formatDollarAmount } from 'utils/numbers' import Percent from 'components/Percent' import { Label, ClickableText } from '../Text' import { PageButtons, Arrow, Break } from 'components/shared' import HoverInlineText from '../HoverInlineText' import useTheme from 'hooks/useTheme' import { TOKEN_HIDE } from '../../constants/index' import { useActiveNetworkVersion } from 'state/application/hooks' const Wrapper = styled(DarkGreyCard)` width: 100%; ` const ResponsiveGrid = styled.div` display: grid; grid-gap: 1em; align-items: center; grid-template-columns: 20px 3fr repeat(4, 1fr); @media screen and (max-width: 900px) { grid-template-columns: 20px 1.5fr repeat(3, 1fr); & :nth-child(4) { display: none; } } @media screen and (max-width: 800px) { grid-template-columns: 20px 1.5fr repeat(2, 1fr); & :nth-child(6) { display: none; } } @media screen and (max-width: 670px) { grid-template-columns: repeat(2, 1fr); > *:first-child { display: none; } > *:nth-child(3) { display: none; } } ` const LinkWrapper = styled(Link)` text-decoration: none; :hover { cursor: pointer; opacity: 0.7; } ` const ResponsiveLogo = styled(CurrencyLogo)` @media screen and (max-width: 670px) { width: 16px; height: 16px; } ` const DataRow = ({ tokenData, index }: { tokenData: TokenData; index: number }) => { const theme = useTheme() return ( ) } const SORT_FIELD = { name: 'name', volumeUSD: 'volumeUSD', tvlUSD: 'tvlUSD', priceUSD: 'priceUSD', priceUSDChange: 'priceUSDChange', priceUSDChangeWeek: 'priceUSDChangeWeek', } const MAX_ITEMS = 10 export default function TokenTable({ tokenDatas, maxItems = MAX_ITEMS, }: { tokenDatas: TokenData[] | undefined maxItems?: number }) { const [currentNetwork] = useActiveNetworkVersion() // theming const theme = useTheme() // for sorting const [sortField, setSortField] = useState(SORT_FIELD.tvlUSD) const [sortDirection, setSortDirection] = useState(true) // pagination const [page, setPage] = useState(1) const [maxPage, setMaxPage] = useState(1) useEffect(() => { let extraPages = 1 if (tokenDatas) { if (tokenDatas.length % maxItems === 0) { extraPages = 0 } setMaxPage(Math.floor(tokenDatas.length / maxItems) + extraPages) } }, [maxItems, tokenDatas]) const sortedTokens = useMemo(() => { return tokenDatas ? tokenDatas .filter((x) => !!x && !TOKEN_HIDE[currentNetwork.id].includes(x.address)) .sort((a, b) => { if (a && b) { return a[sortField as keyof TokenData] > b[sortField as keyof TokenData] ? (sortDirection ? -1 : 1) * 1 : (sortDirection ? -1 : 1) * -1 } else { return -1 } }) .slice(maxItems * (page - 1), page * maxItems) : [] }, [tokenDatas, maxItems, page, currentNetwork.id, sortField, sortDirection]) const handleSort = useCallback( (newField: string) => { setSortField(newField) setSortDirection(sortField !== newField ? true : !sortDirection) }, [sortDirection, sortField], ) const arrow = useCallback( (field: string) => { return sortField === field ? (!sortDirection ? '↑' : '↓') : '' }, [sortDirection, sortField], ) if (!tokenDatas) { return } return ( {sortedTokens.length > 0 ? ( handleSort(SORT_FIELD.name)}> Name {arrow(SORT_FIELD.name)} handleSort(SORT_FIELD.priceUSD)}> Price {arrow(SORT_FIELD.priceUSD)} handleSort(SORT_FIELD.priceUSDChange)}> Price Change {arrow(SORT_FIELD.priceUSDChange)} {/* handleSort(SORT_FIELD.priceUSDChangeWeek)}> 7d {arrow(SORT_FIELD.priceUSDChangeWeek)} */} handleSort(SORT_FIELD.volumeUSD)}> Volume 24H {arrow(SORT_FIELD.volumeUSD)} handleSort(SORT_FIELD.tvlUSD)}> TVL {arrow(SORT_FIELD.tvlUSD)} {sortedTokens.map((data, i) => { if (data) { return ( ) } return null })}
    { setPage(page === 1 ? page : page - 1) }} >
    {'Page ' + page + ' of ' + maxPage}
    { setPage(page === maxPage ? page : page + 1) }} >
    ) : (
    )} ) } ================================================ FILE: src/components/tokens/TopTokenMovers.tsx ================================================ import React, { useMemo, useRef, useState, useEffect } from 'react' import styled from 'styled-components' import { useAllTokenData } from 'state/tokens/hooks' import { GreyCard } from 'components/Card' import { TokenData } from 'state/tokens/reducer' import { AutoColumn } from 'components/Column' import { RowFixed, RowFlat } from 'components/Row' import CurrencyLogo from 'components/CurrencyLogo' import { TYPE, StyledInternalLink } from 'theme' import { formatDollarAmount } from 'utils/numbers' import Percent from 'components/Percent' import HoverInlineText from 'components/HoverInlineText' const CardWrapper = styled(StyledInternalLink)` min-width: 190px; margin-right: 16px; :hover { cursor: pointer; opacity: 0.6; } ` const FixedContainer = styled(AutoColumn)`` export const ScrollableRow = styled.div` display: flex; flex-direction: row; width: 100%; overflow-x: auto; white-space: nowrap; ::-webkit-scrollbar { display: none; } ` const DataCard = ({ tokenData }: { tokenData: TokenData }) => { return ( {formatDollarAmount(tokenData.priceUSD)} ) } export default function TopTokenMovers() { const allTokens = useAllTokenData() const topPriceIncrease = useMemo(() => { return Object.values(allTokens) .sort(({ data: a }, { data: b }) => { return a && b ? (Math.abs(a?.priceUSDChange) > Math.abs(b?.priceUSDChange) ? -1 : 1) : -1 }) .slice(0, Math.min(20, Object.values(allTokens).length)) }, [allTokens]) const increaseRef = useRef(null) const [increaseSet, setIncreaseSet] = useState(false) // const [pauseAnimation, setPauseAnimation] = useState(false) // const [resetInterval, setClearInterval] = useState<() => void | undefined>() useEffect(() => { if (!increaseSet && increaseRef && increaseRef.current) { setInterval(() => { if (increaseRef.current && increaseRef.current.scrollLeft !== increaseRef.current.scrollWidth) { increaseRef.current.scrollTo(increaseRef.current.scrollLeft + 1, 0) } }, 30) setIncreaseSet(true) } }, [increaseRef, increaseSet]) return ( {topPriceIncrease.map((entry) => entry.data ? : null, )} ) } ================================================ FILE: src/constants/abis/argent-wallet-detector.json ================================================ [ { "inputs": [ { "internalType": "bytes32[]", "name": "_codes", "type": "bytes32[]" }, { "internalType": "address[]", "name": "_implementations", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [{ "indexed": true, "internalType": "bytes32", "name": "code", "type": "bytes32" }], "name": "CodeAdded", "type": "event" }, { "anonymous": false, "inputs": [{ "indexed": true, "internalType": "address", "name": "implementation", "type": "address" }], "name": "ImplementationAdded", "type": "event" }, { "anonymous": false, "inputs": [{ "indexed": true, "internalType": "address", "name": "_newOwner", "type": "address" }], "name": "OwnerChanged", "type": "event" }, { "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "name": "acceptedCodes", "outputs": [ { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "uint128", "name": "index", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "acceptedImplementations", "outputs": [ { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "uint128", "name": "index", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "_code", "type": "bytes32" }], "name": "addCode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "_argentWallet", "type": "address" }], "name": "addCodeAndImplementationFromWallet", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "_impl", "type": "address" }], "name": "addImplementation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "_newOwner", "type": "address" }], "name": "changeOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getCodes", "outputs": [{ "internalType": "bytes32[]", "name": "", "type": "bytes32[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getImplementations", "outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "_wallet", "type": "address" }], "name": "isArgentWallet", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" } ] ================================================ FILE: src/constants/abis/argent-wallet-detector.ts ================================================ import ARGENT_WALLET_DETECTOR_ABI from './argent-wallet-detector.json' const ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8' export { ARGENT_WALLET_DETECTOR_ABI, ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS } ================================================ FILE: src/constants/abis/ens-public-resolver.json ================================================ [ { "inputs": [ { "internalType": "contract ENS", "name": "_ens", "type": "address" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": true, "internalType": "uint256", "name": "contentType", "type": "uint256" } ], "name": "ABIChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "a", "type": "address" } ], "name": "AddrChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "coinType", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "newAddress", "type": "bytes" } ], "name": "AddressChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isAuthorised", "type": "bool" } ], "name": "AuthorisationChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "hash", "type": "bytes" } ], "name": "ContenthashChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "name", "type": "bytes" }, { "indexed": false, "internalType": "uint16", "name": "resource", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "record", "type": "bytes" } ], "name": "DNSRecordChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "name", "type": "bytes" }, { "indexed": false, "internalType": "uint16", "name": "resource", "type": "uint16" } ], "name": "DNSRecordDeleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "DNSZoneCleared", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": true, "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }, { "indexed": false, "internalType": "address", "name": "implementer", "type": "address" } ], "name": "InterfaceChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "name", "type": "string" } ], "name": "NameChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "x", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "y", "type": "bytes32" } ], "name": "PubkeyChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": true, "internalType": "string", "name": "indexedKey", "type": "string" }, { "indexed": false, "internalType": "string", "name": "key", "type": "string" } ], "name": "TextChanged", "type": "event" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "uint256", "name": "contentTypes", "type": "uint256" } ], "name": "ABI", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "addr", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "authorisations", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "clearDNSZone", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "contenthash", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes32", "name": "name", "type": "bytes32" }, { "internalType": "uint16", "name": "resource", "type": "uint16" } ], "name": "dnsRecord", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes32", "name": "name", "type": "bytes32" } ], "name": "hasDNSRecords", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" } ], "name": "interfaceImplementer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "pubkey", "outputs": [ { "internalType": "bytes32", "name": "x", "type": "bytes32" }, { "internalType": "bytes32", "name": "y", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "uint256", "name": "contentType", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "setABI", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "uint256", "name": "coinType", "type": "uint256" }, { "internalType": "bytes", "name": "a", "type": "bytes" } ], "name": "setAddr", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "address", "name": "a", "type": "address" } ], "name": "setAddr", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bool", "name": "isAuthorised", "type": "bool" } ], "name": "setAuthorisation", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes", "name": "hash", "type": "bytes" } ], "name": "setContenthash", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "setDNSRecords", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }, { "internalType": "address", "name": "implementer", "type": "address" } ], "name": "setInterface", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "string", "name": "name", "type": "string" } ], "name": "setName", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes32", "name": "x", "type": "bytes32" }, { "internalType": "bytes32", "name": "y", "type": "bytes32" } ], "name": "setPubkey", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "string", "name": "key", "type": "string" }, { "internalType": "string", "name": "value", "type": "string" } ], "name": "setText", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "string", "name": "key", "type": "string" } ], "name": "text", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" } ] ================================================ FILE: src/constants/abis/ens-registrar.json ================================================ [ { "inputs": [ { "internalType": "contract ENS", "name": "_old", "type": "address" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "label", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" } ], "name": "NewOwner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "resolver", "type": "address" } ], "name": "NewResolver", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "uint64", "name": "ttl", "type": "uint64" } ], "name": "NewTTL", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" } ], "name": "Transfer", "type": "event" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "old", "outputs": [ { "internalType": "contract ENS", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "recordExists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "resolver", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "setOwner", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "resolver", "type": "address" }, { "internalType": "uint64", "name": "ttl", "type": "uint64" } ], "name": "setRecord", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "address", "name": "resolver", "type": "address" } ], "name": "setResolver", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes32", "name": "label", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "setSubnodeOwner", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "bytes32", "name": "label", "type": "bytes32" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "resolver", "type": "address" }, { "internalType": "uint64", "name": "ttl", "type": "uint64" } ], "name": "setSubnodeRecord", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "uint64", "name": "ttl", "type": "uint64" } ], "name": "setTTL", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" } ], "name": "ttl", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "payable": false, "stateMutability": "view", "type": "function" } ] ================================================ FILE: src/constants/abis/erc20.json ================================================ [ { "constant": true, "inputs": [], "name": "name", "outputs": [{ "name": "", "type": "string" }], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_spender", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "approve", "outputs": [{ "name": "", "type": "bool" }], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [{ "name": "", "type": "uint256" }], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_from", "type": "address" }, { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transferFrom", "outputs": [{ "name": "", "type": "bool" }], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [{ "name": "", "type": "uint8" }], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [{ "name": "_owner", "type": "address" }], "name": "balanceOf", "outputs": [{ "name": "balance", "type": "uint256" }], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [{ "name": "", "type": "string" }], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [{ "name": "", "type": "bool" }], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_owner", "type": "address" }, { "name": "_spender", "type": "address" } ], "name": "allowance", "outputs": [{ "name": "", "type": "uint256" }], "payable": false, "stateMutability": "view", "type": "function" }, { "payable": true, "stateMutability": "payable", "type": "fallback" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "owner", "type": "address" }, { "indexed": true, "name": "spender", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "from", "type": "address" }, { "indexed": true, "name": "to", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" } ] ================================================ FILE: src/constants/abis/erc20.ts ================================================ import { Interface } from '@ethersproject/abi' import ERC20_ABI from './erc20.json' import ERC20_BYTES32_ABI from './erc20_bytes32.json' const ERC20_INTERFACE = new Interface(ERC20_ABI) const ERC20_BYTES32_INTERFACE = new Interface(ERC20_BYTES32_ABI) export default ERC20_INTERFACE export { ERC20_ABI, ERC20_BYTES32_INTERFACE, ERC20_BYTES32_ABI } ================================================ FILE: src/constants/abis/erc20_bytes32.json ================================================ [ { "constant": true, "inputs": [], "name": "name", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" } ] ================================================ FILE: src/constants/abis/migrator.json ================================================ [ { "inputs": [ { "internalType": "address", "name": "_factoryV1", "type": "address" }, { "internalType": "address", "name": "_router", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountTokenMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountETHMin", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ] ================================================ FILE: src/constants/abis/migrator.ts ================================================ import MIGRATOR_ABI from './migrator.json' const MIGRATOR_ADDRESS = '0x16D4F26C15f3658ec65B1126ff27DD3dF2a2996b' export { MIGRATOR_ADDRESS, MIGRATOR_ABI } ================================================ FILE: src/constants/abis/staking-rewards.ts ================================================ import { Interface } from '@ethersproject/abi' import { abi as STAKING_REWARDS_ABI } from '@uniswap/liquidity-staker/build/StakingRewards.json' import { abi as STAKING_REWARDS_FACTORY_ABI } from '@uniswap/liquidity-staker/build/StakingRewardsFactory.json' const STAKING_REWARDS_INTERFACE = new Interface(STAKING_REWARDS_ABI) const STAKING_REWARDS_FACTORY_INTERFACE = new Interface(STAKING_REWARDS_FACTORY_ABI) export { STAKING_REWARDS_FACTORY_INTERFACE, STAKING_REWARDS_INTERFACE } ================================================ FILE: src/constants/abis/unisocks.json ================================================ [ { "name": "Transfer", "inputs": [ { "type": "address", "name": "_from", "indexed": true }, { "type": "address", "name": "_to", "indexed": true }, { "type": "uint256", "name": "_tokenId", "indexed": true } ], "anonymous": false, "type": "event" }, { "name": "Approval", "inputs": [ { "type": "address", "name": "_owner", "indexed": true }, { "type": "address", "name": "_approved", "indexed": true }, { "type": "uint256", "name": "_tokenId", "indexed": true } ], "anonymous": false, "type": "event" }, { "name": "ApprovalForAll", "inputs": [ { "type": "address", "name": "_owner", "indexed": true }, { "type": "address", "name": "_operator", "indexed": true }, { "type": "bool", "name": "_approved", "indexed": false } ], "anonymous": false, "type": "event" }, { "outputs": [], "inputs": [], "constant": false, "payable": false, "type": "constructor" }, { "name": "tokenURI", "outputs": [ { "type": "string", "name": "out" } ], "inputs": [ { "type": "uint256", "name": "_tokenId" } ], "constant": true, "payable": false, "type": "function", "gas": 22405 }, { "name": "tokenByIndex", "outputs": [ { "type": "uint256", "name": "out" } ], "inputs": [ { "type": "uint256", "name": "_index" } ], "constant": true, "payable": false, "type": "function", "gas": 631 }, { "name": "tokenOfOwnerByIndex", "outputs": [ { "type": "uint256", "name": "out" } ], "inputs": [ { "type": "address", "name": "_owner" }, { "type": "uint256", "name": "_index" } ], "constant": true, "payable": false, "type": "function", "gas": 1248 }, { "name": "transferFrom", "outputs": [], "inputs": [ { "type": "address", "name": "_from" }, { "type": "address", "name": "_to" }, { "type": "uint256", "name": "_tokenId" } ], "constant": false, "payable": false, "type": "function", "gas": 259486 }, { "name": "safeTransferFrom", "outputs": [], "inputs": [ { "type": "address", "name": "_from" }, { "type": "address", "name": "_to" }, { "type": "uint256", "name": "_tokenId" } ], "constant": false, "payable": false, "type": "function" }, { "name": "safeTransferFrom", "outputs": [], "inputs": [ { "type": "address", "name": "_from" }, { "type": "address", "name": "_to" }, { "type": "uint256", "name": "_tokenId" }, { "type": "bytes", "name": "_data" } ], "constant": false, "payable": false, "type": "function" }, { "name": "approve", "outputs": [], "inputs": [ { "type": "address", "name": "_approved" }, { "type": "uint256", "name": "_tokenId" } ], "constant": false, "payable": false, "type": "function", "gas": 38422 }, { "name": "setApprovalForAll", "outputs": [], "inputs": [ { "type": "address", "name": "_operator" }, { "type": "bool", "name": "_approved" } ], "constant": false, "payable": false, "type": "function", "gas": 38016 }, { "name": "mint", "outputs": [ { "type": "bool", "name": "out" } ], "inputs": [ { "type": "address", "name": "_to" } ], "constant": false, "payable": false, "type": "function", "gas": 182636 }, { "name": "changeMinter", "outputs": [], "inputs": [ { "type": "address", "name": "_minter" } ], "constant": false, "payable": false, "type": "function", "gas": 35897 }, { "name": "changeURI", "outputs": [], "inputs": [ { "type": "address", "name": "_newURI" } ], "constant": false, "payable": false, "type": "function", "gas": 35927 }, { "name": "name", "outputs": [ { "type": "string", "name": "out" } ], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 6612 }, { "name": "symbol", "outputs": [ { "type": "string", "name": "out" } ], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 6642 }, { "name": "totalSupply", "outputs": [ { "type": "uint256", "name": "out" } ], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 873 }, { "name": "minter", "outputs": [ { "type": "address", "name": "out" } ], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 903 }, { "name": "socks", "outputs": [ { "type": "address", "name": "out", "unit": "Socks" } ], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 933 }, { "name": "newURI", "outputs": [ { "type": "address", "name": "out" } ], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 963 }, { "name": "ownerOf", "outputs": [ { "type": "address", "name": "out" } ], "inputs": [ { "type": "uint256", "name": "arg0" } ], "constant": true, "payable": false, "type": "function", "gas": 1126 }, { "name": "balanceOf", "outputs": [ { "type": "uint256", "name": "out" } ], "inputs": [ { "type": "address", "name": "arg0" } ], "constant": true, "payable": false, "type": "function", "gas": 1195 }, { "name": "getApproved", "outputs": [ { "type": "address", "name": "out" } ], "inputs": [ { "type": "uint256", "name": "arg0" } ], "constant": true, "payable": false, "type": "function", "gas": 1186 }, { "name": "isApprovedForAll", "outputs": [ { "type": "bool", "name": "out" } ], "inputs": [ { "type": "address", "name": "arg0" }, { "type": "address", "name": "arg1" } ], "constant": true, "payable": false, "type": "function", "gas": 1415 }, { "name": "supportsInterface", "outputs": [ { "type": "bool", "name": "out" } ], "inputs": [ { "type": "bytes32", "name": "arg0" } ], "constant": true, "payable": false, "type": "function", "gas": 1246 } ] ================================================ FILE: src/constants/abis/weth.json ================================================ [ { "constant": true, "inputs": [], "name": "name", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "guy", "type": "address" }, { "name": "wad", "type": "uint256" } ], "name": "approve", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "src", "type": "address" }, { "name": "dst", "type": "address" }, { "name": "wad", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "wad", "type": "uint256" } ], "name": "withdraw", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "dst", "type": "address" }, { "name": "wad", "type": "uint256" } ], "name": "transfer", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "deposit", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" }, { "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "payable": true, "stateMutability": "payable", "type": "fallback" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "src", "type": "address" }, { "indexed": true, "name": "guy", "type": "address" }, { "indexed": false, "name": "wad", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "src", "type": "address" }, { "indexed": true, "name": "dst", "type": "address" }, { "indexed": false, "name": "wad", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "dst", "type": "address" }, { "indexed": false, "name": "wad", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "src", "type": "address" }, { "indexed": false, "name": "wad", "type": "uint256" } ], "name": "Withdrawal", "type": "event" } ] ================================================ FILE: src/constants/chains.ts ================================================ import { ChainId, SUPPORTED_CHAINS, SupportedChainsType } from '@uniswap/sdk-core' export const CHAIN_IDS_TO_NAMES = { [ChainId.MAINNET]: 'mainnet', [ChainId.GOERLI]: 'goerli', [ChainId.SEPOLIA]: 'sepolia', [ChainId.POLYGON]: 'polygon', [ChainId.POLYGON_MUMBAI]: 'polygon_mumbai', [ChainId.CELO]: 'celo', [ChainId.CELO_ALFAJORES]: 'celo_alfajores', [ChainId.ARBITRUM_ONE]: 'arbitrum', [ChainId.ARBITRUM_GOERLI]: 'arbitrum_goerli', [ChainId.OPTIMISM]: 'optimism', [ChainId.OPTIMISM_GOERLI]: 'optimism_goerli', [ChainId.BNB]: 'bnb', [ChainId.AVALANCHE]: 'avalanche', [ChainId.BASE]: 'base', } as const // Include ChainIds in this array if they are not supported by the UX yet, but are already in the SDK. const NOT_YET_UX_SUPPORTED_CHAIN_IDS: number[] = [ChainId.BASE_GOERLI] // TODO: include BASE_GOERLI when routing is implemented export type SupportedInterfaceChain = Exclude export function isSupportedChain( chainId: number | null | undefined | ChainId, featureFlags?: Record, ): chainId is SupportedInterfaceChain { if (featureFlags && chainId && chainId in featureFlags) { return featureFlags[chainId] } return !!chainId && SUPPORTED_CHAINS.indexOf(chainId) !== -1 && NOT_YET_UX_SUPPORTED_CHAIN_IDS.indexOf(chainId) === -1 } export function asSupportedChain( chainId: number | null | undefined | ChainId, featureFlags?: Record, ): SupportedInterfaceChain | undefined { if (!chainId) return undefined if (featureFlags && chainId in featureFlags && !featureFlags[chainId]) { return undefined } return isSupportedChain(chainId) ? chainId : undefined } export const SUPPORTED_GAS_ESTIMATE_CHAIN_IDS = [ ChainId.MAINNET, ChainId.POLYGON, ChainId.CELO, ChainId.OPTIMISM, ChainId.ARBITRUM_ONE, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE, ] as const /** * Supported networks for V2 pool behavior. */ export const SUPPORTED_V2POOL_CHAIN_IDS = [ChainId.MAINNET, ChainId.GOERLI] as const export const TESTNET_CHAIN_IDS = [ ChainId.GOERLI, ChainId.SEPOLIA, ChainId.POLYGON_MUMBAI, ChainId.ARBITRUM_GOERLI, ChainId.OPTIMISM_GOERLI, ChainId.CELO_ALFAJORES, ] as const /** * All the chain IDs that are running the Ethereum protocol. */ export const L1_CHAIN_IDS = [ ChainId.MAINNET, ChainId.GOERLI, ChainId.SEPOLIA, ChainId.POLYGON, ChainId.POLYGON_MUMBAI, ChainId.CELO, ChainId.CELO_ALFAJORES, ChainId.BNB, ChainId.AVALANCHE, ] as const export type SupportedL1ChainId = (typeof L1_CHAIN_IDS)[number] /** * Controls some L2 specific behavior, e.g. slippage tolerance, special UI behavior. * The expectation is that all of these networks have immediate transaction confirmation. */ export const L2_CHAIN_IDS = [ ChainId.ARBITRUM_ONE, ChainId.ARBITRUM_GOERLI, ChainId.OPTIMISM, ChainId.OPTIMISM_GOERLI, ChainId.BASE, ] as const export type SupportedL2ChainId = (typeof L2_CHAIN_IDS)[number] /** * Get the priority of a chainId based on its relevance to the user. * @param {ChainId} chainId - The chainId to determine the priority for. * @returns {number} The priority of the chainId, the lower the priority, the earlier it should be displayed, with base of MAINNET=0. */ export function getChainPriority(chainId: ChainId): number { switch (chainId) { case ChainId.MAINNET: case ChainId.GOERLI: case ChainId.SEPOLIA: return 0 case ChainId.ARBITRUM_ONE: case ChainId.ARBITRUM_GOERLI: return 1 case ChainId.OPTIMISM: case ChainId.OPTIMISM_GOERLI: return 2 case ChainId.POLYGON: case ChainId.POLYGON_MUMBAI: return 3 case ChainId.BASE: return 4 case ChainId.BNB: return 5 case ChainId.AVALANCHE: return 6 case ChainId.CELO: case ChainId.CELO_ALFAJORES: return 7 default: return 8 } } export function isUniswapXSupportedChain(chainId: number) { return chainId === ChainId.MAINNET } ================================================ FILE: src/constants/index.ts ================================================ import { BigNumber } from '@ethersproject/bignumber' import { Connector } from '@web3-react/types' import ms from 'ms' import { SupportedNetwork } from './networks' export const MAX_UINT128 = BigNumber.from(2).pow(128).sub(1) export const MATIC_ADDRESS = '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270' export const CELO_ADDRESS = '0x471EcE3750Da237f93B8E339c536989b8978a438' const WETH_ADDRESS = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' const ARBITRUM_WETH_ADDRESS = '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' export const WETH_ADDRESSES = [WETH_ADDRESS, ARBITRUM_WETH_ADDRESS] export const TOKEN_HIDE: { [key: string]: string[] } = { [SupportedNetwork.ETHEREUM]: [ '0xd46ba6d942050d489dbd938a2c909a5d5039a161', '0x7dfb72a2aad08c937706f21421b15bfc34cba9ca', '0x12b32f10a499bf40db334efe04226cca00bf2d9b', '0x160de4468586b6b2f8a92feb0c260fc6cfc743b1', ], [SupportedNetwork.POLYGON]: ['0x8d52c2d70a7c28a9daac2ff12ad9bfbf041cd318'], [SupportedNetwork.ARBITRUM]: [], [SupportedNetwork.OPTIMISM]: [], [SupportedNetwork.CELO]: [], [SupportedNetwork.BNB]: [], [SupportedNetwork.AVALANCHE]: [], [SupportedNetwork.BASE]: [], } export const POOL_HIDE: { [key: string]: string[] } = { [SupportedNetwork.ETHEREUM]: [ '0x86d257cdb7bc9c0df10e84c8709697f92770b335', '0xf8dbd52488978a79dfe6ffbd81a01fc5948bf9ee', '0x8fe8d9bb8eeba3ed688069c3d6b556c9ca258248', '0xa850478adaace4c08fc61de44d8cf3b64f359bec', '0x277667eb3e34f134adf870be9550e9f323d0dc24', '0x8c0411f2ad5470a66cb2e9c64536cfb8dcd54d51', '0x055284a4ca6532ecc219ac06b577d540c686669d', ], [SupportedNetwork.POLYGON]: ['0x5f616541c801e2b9556027076b730e0197974f6a'], [SupportedNetwork.ARBITRUM]: [], [SupportedNetwork.OPTIMISM]: [], [SupportedNetwork.CELO]: [], [SupportedNetwork.BNB]: [], [SupportedNetwork.AVALANCHE]: [], [SupportedNetwork.BASE]: [], } export const START_BLOCKS: { [key: string]: number } = { [SupportedNetwork.ETHEREUM]: 14292820, [SupportedNetwork.POLYGON]: 25459720, [SupportedNetwork.ARBITRUM]: 175, [SupportedNetwork.OPTIMISM]: 10028767, [SupportedNetwork.CELO]: 13916355, [SupportedNetwork.BNB]: 26324014, [SupportedNetwork.AVALANCHE]: 31422450, [SupportedNetwork.BASE]: 1371680, } export interface WalletInfo { connector?: Connector name: string iconName: string description: string href: string | null color: string primary?: true mobile?: true mobileOnly?: true } export const AVERAGE_L1_BLOCK_TIME = ms(`12s`) export const NetworkContextName = 'NETWORK' // SDN OFAC addresses export const BLOCKED_ADDRESSES: string[] = [ '0x7F367cC41522cE07553e823bf3be79A889DEbe1B', '0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b', '0x901bb9583b24D97e995513C6778dc6888AB6870e', '0xA7e5d5A720f06526557c513402f2e6B5fA20b008', ] ================================================ FILE: src/constants/intervals.ts ================================================ /** * Constanst for historical data fetching. * */ import { OpUnitType } from 'dayjs' export const ONE_HOUR_SECONDS = 3600 export const TimeWindow: { [key: string]: OpUnitType } = { DAY: 'day', WEEK: 'week', MONTH: 'month', } ================================================ FILE: src/constants/lists.ts ================================================ // used to mark unsupported tokens, these are hosted lists of unsupported tokens export const UNSUPPORTED_LIST_URLS: string[] = [] export const OPTIMISM_LIST = 'https://static.optimism.io/optimism.tokenlist.json' export const ARBITRUM_LIST = 'https://bridge.arbitrum.io/token-list-42161.json' export const POLYGON_LIST = 'https://unpkg.com/quickswap-default-token-list@1.2.2/build/quickswap-default.tokenlist.json' export const CELO_LIST = 'https://celo-org.github.io/celo-token-list/celo.tokenlist.json' export const BNB_LIST = 'https://raw.githubusercontent.com/plasmadlt/plasma-finance-token-list/master/bnb.json' // lower index == higher priority for token import export const DEFAULT_LIST_OF_LISTS: string[] = [ OPTIMISM_LIST, ARBITRUM_LIST, POLYGON_LIST, CELO_LIST, BNB_LIST, ...UNSUPPORTED_LIST_URLS, // need to load unsupported tokens as well ] // default lists to be 'active' aka searched across export const DEFAULT_ACTIVE_LIST_URLS: string[] = [OPTIMISM_LIST, ARBITRUM_LIST, POLYGON_LIST, CELO_LIST, BNB_LIST] ================================================ FILE: src/constants/multicall/abi.json ================================================ [ { "constant": true, "inputs": [], "name": "getCurrentBlockTimestamp", "outputs": [ { "name": "timestamp", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "components": [ { "name": "target", "type": "address" }, { "name": "callData", "type": "bytes" } ], "name": "calls", "type": "tuple[]" } ], "name": "aggregate", "outputs": [ { "name": "blockNumber", "type": "uint256" }, { "name": "returnData", "type": "bytes[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getLastBlockHash", "outputs": [ { "name": "blockHash", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "addr", "type": "address" } ], "name": "getEthBalance", "outputs": [ { "name": "balance", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getCurrentBlockDifficulty", "outputs": [ { "name": "difficulty", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getCurrentBlockGasLimit", "outputs": [ { "name": "gaslimit", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getCurrentBlockCoinbase", "outputs": [ { "name": "coinbase", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "blockNumber", "type": "uint256" } ], "name": "getBlockHash", "outputs": [ { "name": "blockHash", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" } ] ================================================ FILE: src/constants/multicall/index.ts ================================================ import MULTICALL_ABI from './abi.json' export { MULTICALL_ABI } ================================================ FILE: src/constants/networks.ts ================================================ import OPTIMISM_LOGO_URL from '../assets/images/optimism.svg' import ARBITRUM_LOGO_URL from '../assets/images/arbitrum.svg' import ETHEREUM_LOGO_URL from '../assets/images/ethereum-logo.png' import POLYGON_LOGO_URL from '../assets/images/polygon-logo.png' import CELO_LOGO_URL from '../assets/images/celo-logo.svg' import BNB_LOGO_URL from '../assets/images/bnb-logo.svg' import BASE_LOGO_URL from '../assets/images/base-logo.svg' import { ChainId } from '@uniswap/sdk-core' import AVALANCHE_LOGO_URL from '../assets/images/avalanche-logo.png' export enum SupportedNetwork { ETHEREUM, ARBITRUM, OPTIMISM, POLYGON, CELO, BNB, BASE, AVALANCHE, } export type NetworkInfo = { chainId: ChainId id: SupportedNetwork route: string name: string imageURL: string bgColor: string primaryColor: string secondaryColor: string } export const EthereumNetworkInfo: NetworkInfo = { chainId: ChainId.MAINNET, id: SupportedNetwork.ETHEREUM, route: '', name: 'Ethereum', bgColor: '#fc077d', primaryColor: '#fc077d', secondaryColor: '#2172E5', imageURL: ETHEREUM_LOGO_URL, } export const ArbitrumNetworkInfo: NetworkInfo = { chainId: ChainId.ARBITRUM_ONE, id: SupportedNetwork.ARBITRUM, route: 'arbitrum', name: 'Arbitrum', imageURL: ARBITRUM_LOGO_URL, bgColor: '#0A294B', primaryColor: '#0490ED', secondaryColor: '#96BEDC', } export const OptimismNetworkInfo: NetworkInfo = { chainId: ChainId.OPTIMISM, id: SupportedNetwork.OPTIMISM, route: 'optimism', name: 'Optimism', bgColor: '#F01B36', primaryColor: '#F01B36', secondaryColor: '#FB7876', imageURL: OPTIMISM_LOGO_URL, } export const PolygonNetworkInfo: NetworkInfo = { chainId: ChainId.POLYGON, id: SupportedNetwork.POLYGON, route: 'polygon', name: 'Polygon', bgColor: '#8247e5', primaryColor: '#8247e5', secondaryColor: '#FB7876', imageURL: POLYGON_LOGO_URL, } export const CeloNetworkInfo: NetworkInfo = { chainId: ChainId.CELO, id: SupportedNetwork.CELO, route: 'celo', name: 'Celo', bgColor: '#02502F', primaryColor: '#35D07F', secondaryColor: '#9ACDB2', imageURL: CELO_LOGO_URL, } export const BNBNetworkInfo: NetworkInfo = { chainId: ChainId.BNB, id: SupportedNetwork.BNB, route: 'bnb', name: 'BNB Chain', bgColor: '#F0B90B', primaryColor: '#F0B90B', secondaryColor: '#F0B90B', imageURL: BNB_LOGO_URL, } export const BaseNetworkInfo: NetworkInfo = { chainId: ChainId.BASE, id: SupportedNetwork.BASE, route: 'base', name: 'Base', bgColor: '#0052ff', primaryColor: '#0052ff', secondaryColor: '#0052ff', imageURL: BASE_LOGO_URL, } export const AvalancheNetworkInfo: NetworkInfo = { chainId: 43114, id: SupportedNetwork.AVALANCHE, route: 'avax', name: 'Avalanche', bgColor: '#e84142', primaryColor: '#e84142', secondaryColor: '#e84142', imageURL: AVALANCHE_LOGO_URL, } export const SUPPORTED_NETWORK_VERSIONS: NetworkInfo[] = [ EthereumNetworkInfo, PolygonNetworkInfo, OptimismNetworkInfo, ArbitrumNetworkInfo, CeloNetworkInfo, BNBNetworkInfo, BaseNetworkInfo, AvalancheNetworkInfo, ] ================================================ FILE: src/constants/tokenLists/uniswap-v2-unsupported.tokenlist.json ================================================ { "name": "Uniswap V2 Unsupported List", "timestamp": "2021-01-05T20:47:02.923Z", "version": { "major": 1, "minor": 0, "patch": 0 }, "tags": {}, "logoURI": "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir", "keywords": ["uniswap", "unsupported"], "tokens": [ { "name": "Gold Tether", "address": "0x4922a015c4407F87432B179bb209e125432E4a2A", "symbol": "XAUt", "decimals": 6, "chainId": 1, "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" } ] } ================================================ FILE: src/data/application/index.ts ================================================ import { useActiveNetworkVersion } from 'state/application/hooks' import { healthClient } from './../../apollo/client' import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import { ArbitrumNetworkInfo, EthereumNetworkInfo } from 'constants/networks' export const SUBGRAPH_HEALTH = gql` query health($name: Bytes) { indexingStatusForCurrentVersion(subgraphName: $name, subgraphError: allow) { synced health chains { chainHeadBlock { number } latestBlock { number } } } } ` interface HealthResponse { indexingStatusForCurrentVersion: { chains: { chainHeadBlock: { number: string } latestBlock: { number: string } }[] synced: boolean } } /** * Fetch top addresses by volume */ export function useFetchedSubgraphStatus(): { available: boolean | null syncedBlock: number | undefined headBlock: number | undefined } { const [activeNetwork] = useActiveNetworkVersion() const { loading, error, data } = useQuery(SUBGRAPH_HEALTH, { client: healthClient, fetchPolicy: 'network-only', variables: { name: activeNetwork === EthereumNetworkInfo ? 'uniswap/uniswap-v3' : activeNetwork === ArbitrumNetworkInfo ? 'ianlapham/uniswap-arbitrum-one' : 'ianlapham/uniswap-optimism', }, }) const parsed = data?.indexingStatusForCurrentVersion if (loading) { return { available: null, syncedBlock: undefined, headBlock: undefined, } } if ((!loading && !parsed) || error) { return { available: false, syncedBlock: undefined, headBlock: undefined, } } const syncedBlock = parsed?.chains[0].latestBlock.number const headBlock = parsed?.chains[0].chainHeadBlock.number return { available: true, syncedBlock: syncedBlock ? parseFloat(syncedBlock) : undefined, headBlock: headBlock ? parseFloat(headBlock) : undefined, } } ================================================ FILE: src/data/combined/pools.ts ================================================ import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import { useDeltaTimestamps } from 'utils/queries' import { useBlocksFromTimestamps } from 'hooks/useBlocksFromTimestamps' import { PoolData } from 'state/pools/reducer' import { get2DayChange } from 'utils/data' import { formatTokenName, formatTokenSymbol } from 'utils/tokens' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' export const POOLS_BULK = (block: number | undefined, pools: string[]) => { let poolString = `[` pools.map((address) => { return (poolString += `"${address}",`) }) poolString += ']' const queryString = ` query pools { pools(where: {id_in: ${poolString}},` + (block ? `block: {number: ${block}} ,` : ``) + ` orderBy: totalValueLockedUSD, orderDirection: desc, subgraphError: allow) { id feeTier liquidity sqrtPrice tick token0 { id symbol name decimals derivedETH } token1 { id symbol name decimals derivedETH } token0Price token1Price volumeUSD txCount totalValueLockedToken0 totalValueLockedToken1 totalValueLockedUSD } } ` return gql(queryString) } interface PoolFields { id: string feeTier: string liquidity: string sqrtPrice: string tick: string token0: { id: string symbol: string name: string decimals: string derivedETH: string } token1: { id: string symbol: string name: string decimals: string derivedETH: string } token0Price: string token1Price: string volumeUSD: string txCount: string totalValueLockedToken0: string totalValueLockedToken1: string totalValueLockedUSD: string } interface PoolDataResponse { pools: PoolFields[] } /** * Fetch top addresses by volume */ export function usePoolDatas(poolAddresses: string[]): { loading: boolean error: boolean data: | { [address: string]: PoolData } | undefined } { // get client const { dataClient } = useClients() const [activeNetwork] = useActiveNetworkVersion() // get blocks from historic timestamps const [t24, t48, tWeek] = useDeltaTimestamps() const { blocks, error: blockError } = useBlocksFromTimestamps([t24, t48, tWeek]) const [block24, block48, blockWeek] = blocks ?? [] const { loading, error, data } = useQuery(POOLS_BULK(undefined, poolAddresses), { client: dataClient, }) const { loading: loading24, error: error24, data: data24, } = useQuery(POOLS_BULK(block24?.number, poolAddresses), { client: dataClient }) const { loading: loading48, error: error48, data: data48, } = useQuery(POOLS_BULK(block48?.number, poolAddresses), { client: dataClient }) const { loading: loadingWeek, error: errorWeek, data: dataWeek, } = useQuery(POOLS_BULK(blockWeek?.number, poolAddresses), { client: dataClient }) const anyError = Boolean(error || error24 || error48 || blockError || errorWeek) const anyLoading = Boolean(loading || loading24 || loading48 || loadingWeek) // return early if not all data yet if (anyError || anyLoading) { return { loading: anyLoading, error: anyError, data: undefined, } } const parsed = data?.pools ? data.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsed24 = data24?.pools ? data24.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsed48 = data48?.pools ? data48.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsedWeek = dataWeek?.pools ? dataWeek.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} // format data and calculate daily changes const formatted = poolAddresses.reduce((accum: { [address: string]: PoolData }, address) => { const current: PoolFields | undefined = parsed[address] const oneDay: PoolFields | undefined = parsed24[address] const twoDay: PoolFields | undefined = parsed48[address] const week: PoolFields | undefined = parsedWeek[address] const [volumeUSD, volumeUSDChange] = current && oneDay && twoDay ? get2DayChange(current.volumeUSD, oneDay.volumeUSD, twoDay.volumeUSD) : current ? [parseFloat(current.volumeUSD), 0] : [0, 0] const volumeUSDWeek = current && week ? parseFloat(current.volumeUSD) - parseFloat(week.volumeUSD) : current ? parseFloat(current.volumeUSD) : 0 const tvlUSD = current ? parseFloat(current.totalValueLockedUSD) : 0 const tvlUSDChange = current && oneDay ? ((parseFloat(current.totalValueLockedUSD) - parseFloat(oneDay.totalValueLockedUSD)) / parseFloat(oneDay.totalValueLockedUSD === '0' ? '1' : oneDay.totalValueLockedUSD)) * 100 : 0 const tvlToken0 = current ? parseFloat(current.totalValueLockedToken0) : 0 const tvlToken1 = current ? parseFloat(current.totalValueLockedToken1) : 0 const feeTier = current ? parseInt(current.feeTier) : 0 if (current) { accum[address] = { address, feeTier, liquidity: parseFloat(current.liquidity), sqrtPrice: parseFloat(current.sqrtPrice), tick: parseFloat(current.tick), token0: { address: current.token0.id, name: formatTokenName(current.token0.id, current.token0.name, activeNetwork), symbol: formatTokenSymbol(current.token0.id, current.token0.symbol, activeNetwork), decimals: parseInt(current.token0.decimals), derivedETH: parseFloat(current.token0.derivedETH), }, token1: { address: current.token1.id, name: formatTokenName(current.token1.id, current.token1.name, activeNetwork), symbol: formatTokenSymbol(current.token1.id, current.token1.symbol, activeNetwork), decimals: parseInt(current.token1.decimals), derivedETH: parseFloat(current.token1.derivedETH), }, token0Price: parseFloat(current.token0Price), token1Price: parseFloat(current.token1Price), volumeUSD, volumeUSDChange, volumeUSDWeek, tvlUSD, tvlUSDChange, tvlToken0, tvlToken1, } } return accum }, {}) return { loading: anyLoading, error: anyError, data: formatted, } } ================================================ FILE: src/data/pools/chartData.ts ================================================ import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import weekOfYear from 'dayjs/plugin/weekOfYear' import gql from 'graphql-tag' import { PoolChartEntry } from 'state/pools/reducer' import { ApolloClient, NormalizedCacheObject } from '@apollo/client' // format dayjs with the libraries that we need dayjs.extend(utc) dayjs.extend(weekOfYear) const ONE_DAY_UNIX = 24 * 60 * 60 const POOL_CHART = gql` query poolDayDatas($startTime: Int!, $skip: Int!, $address: Bytes!) { poolDayDatas( first: 1000 skip: $skip where: { pool: $address, date_gt: $startTime } orderBy: date orderDirection: asc subgraphError: allow ) { date volumeUSD tvlUSD feesUSD pool { feeTier } } } ` interface ChartResults { poolDayDatas: { date: number volumeUSD: string tvlUSD: string feesUSD: string pool: { feeTier: string } }[] } export async function fetchPoolChartData(address: string, client: ApolloClient) { let data: { date: number volumeUSD: string tvlUSD: string feesUSD: string pool: { feeTier: string } }[] = [] const startTimestamp = 1619170975 const endTimestamp = dayjs.utc().unix() let error = false let skip = 0 let allFound = false try { while (!allFound) { const { data: chartResData, error, loading, } = await client.query({ query: POOL_CHART, variables: { address: address, startTime: startTimestamp, skip, }, fetchPolicy: 'cache-first', }) if (!loading) { skip += 1000 if (chartResData.poolDayDatas.length < 1000 || error) { allFound = true } if (chartResData) { data = data.concat(chartResData.poolDayDatas) } } } } catch { error = true } if (data) { const formattedExisting = data.reduce((accum: { [date: number]: PoolChartEntry }, dayData) => { const roundedDate = parseInt((dayData.date / ONE_DAY_UNIX).toFixed(0)) const feePercent = parseFloat(dayData.pool.feeTier) / 10000 const tvlAdjust = dayData?.volumeUSD ? parseFloat(dayData.volumeUSD) * feePercent : 0 accum[roundedDate] = { date: dayData.date, volumeUSD: parseFloat(dayData.volumeUSD), totalValueLockedUSD: parseFloat(dayData.tvlUSD) - tvlAdjust, feesUSD: parseFloat(dayData.feesUSD), } return accum }, {}) const firstEntry = formattedExisting[parseInt(Object.keys(formattedExisting)[0])] // fill in empty days ( there will be no day datas if no trades made that day ) let timestamp = firstEntry?.date ?? startTimestamp let latestTvl = firstEntry?.totalValueLockedUSD ?? 0 while (timestamp < endTimestamp - ONE_DAY_UNIX) { const nextDay = timestamp + ONE_DAY_UNIX const currentDayIndex = parseInt((nextDay / ONE_DAY_UNIX).toFixed(0)) if (!Object.keys(formattedExisting).includes(currentDayIndex.toString())) { formattedExisting[currentDayIndex] = { date: nextDay, volumeUSD: 0, totalValueLockedUSD: latestTvl, feesUSD: 0, } } else { latestTvl = formattedExisting[currentDayIndex].totalValueLockedUSD } timestamp = nextDay } const dateMap = Object.keys(formattedExisting).map((key) => { return formattedExisting[parseInt(key)] }) return { data: dateMap, error: false, } } else { return { data: undefined, error, } } } ================================================ FILE: src/data/pools/poolData.ts ================================================ import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import { useDeltaTimestamps } from 'utils/queries' import { useBlocksFromTimestamps } from 'hooks/useBlocksFromTimestamps' import { PoolData } from 'state/pools/reducer' import { get2DayChange } from 'utils/data' import { formatTokenName, formatTokenSymbol } from 'utils/tokens' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' export const POOLS_BULK = (block: number | undefined, pools: string[]) => { let poolString = `[` pools.map((address) => { return (poolString += `"${address}",`) }) poolString += ']' const queryString = ` query pools { pools(where: {id_in: ${poolString}},` + (block ? `block: {number: ${block}} ,` : ``) + ` orderBy: totalValueLockedUSD, orderDirection: desc, subgraphError: allow) { id feeTier liquidity sqrtPrice tick token0 { id symbol name decimals derivedETH } token1 { id symbol name decimals derivedETH } token0Price token1Price volumeUSD volumeToken0 volumeToken1 txCount totalValueLockedToken0 totalValueLockedToken1 totalValueLockedUSD } bundles (where: {id: "1"}) { ethPriceUSD } } ` return gql(queryString) } interface PoolFields { id: string feeTier: string liquidity: string sqrtPrice: string tick: string token0: { id: string symbol: string name: string decimals: string derivedETH: string } token1: { id: string symbol: string name: string decimals: string derivedETH: string } token0Price: string token1Price: string volumeUSD: string volumeToken0: string volumeToken1: string txCount: string totalValueLockedToken0: string totalValueLockedToken1: string totalValueLockedUSD: string } interface PoolDataResponse { pools: PoolFields[] bundles: { ethPriceUSD: string }[] } /** * Fetch top addresses by volume */ export function usePoolDatas(poolAddresses: string[]): { loading: boolean error: boolean data: | { [address: string]: PoolData } | undefined } { // get client const { dataClient } = useClients() const [activeNetwork] = useActiveNetworkVersion() // get blocks from historic timestamps const [t24, t48, tWeek] = useDeltaTimestamps() const { blocks, error: blockError } = useBlocksFromTimestamps([t24, t48, tWeek]) const [block24, block48, blockWeek] = blocks ?? [] const { loading, error, data } = useQuery(POOLS_BULK(undefined, poolAddresses), { client: dataClient, }) const { loading: loading24, error: error24, data: data24, } = useQuery(POOLS_BULK(block24?.number, poolAddresses), { client: dataClient }) const { loading: loading48, error: error48, data: data48, } = useQuery(POOLS_BULK(block48?.number, poolAddresses), { client: dataClient }) const { loading: loadingWeek, error: errorWeek, data: dataWeek, } = useQuery(POOLS_BULK(blockWeek?.number, poolAddresses), { client: dataClient }) const anyError = Boolean(error || error24 || error48 || blockError || errorWeek) const anyLoading = Boolean(loading || loading24 || loading48 || loadingWeek) // return early if not all data yet if (anyError || anyLoading) { return { loading: anyLoading, error: anyError, data: undefined, } } const ethPriceUSD = data?.bundles?.[0]?.ethPriceUSD ? parseFloat(data?.bundles?.[0]?.ethPriceUSD) : 0 const parsed = data?.pools ? data.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsed24 = data24?.pools ? data24.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsed48 = data48?.pools ? data48.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsedWeek = dataWeek?.pools ? dataWeek.pools.reduce((accum: { [address: string]: PoolFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} // format data and calculate daily changes const formatted = poolAddresses.reduce((accum: { [address: string]: PoolData }, address) => { const current: PoolFields | undefined = parsed[address] const oneDay: PoolFields | undefined = parsed24[address] const twoDay: PoolFields | undefined = parsed48[address] const week: PoolFields | undefined = parsedWeek[address] const [volumeUSD, volumeUSDChange] = current && oneDay && twoDay ? get2DayChange(current.volumeUSD, oneDay.volumeUSD, twoDay.volumeUSD) : current ? [parseFloat(current.volumeUSD), 0] : [0, 0] const volumeUSDWeek = current && week ? parseFloat(current.volumeUSD) - parseFloat(week.volumeUSD) : current ? parseFloat(current.volumeUSD) : 0 // Hotifx: Subtract fees from TVL to correct data while subgraph is fixed. /** * Note: see issue desribed here https://github.com/Uniswap/v3-subgraph/issues/74 * During subgraph deploy switch this month we lost logic to fix this accounting. * Grafted sync pending fix now. */ const feePercent = current ? parseFloat(current.feeTier) / 10000 / 100 : 0 const tvlAdjust0 = current?.volumeToken0 ? (parseFloat(current.volumeToken0) * feePercent) / 2 : 0 const tvlAdjust1 = current?.volumeToken1 ? (parseFloat(current.volumeToken1) * feePercent) / 2 : 0 const tvlToken0 = current ? parseFloat(current.totalValueLockedToken0) - tvlAdjust0 : 0 const tvlToken1 = current ? parseFloat(current.totalValueLockedToken1) - tvlAdjust1 : 0 let tvlUSD = current ? parseFloat(current.totalValueLockedUSD) : 0 const tvlUSDChange = current && oneDay ? ((parseFloat(current.totalValueLockedUSD) - parseFloat(oneDay.totalValueLockedUSD)) / parseFloat(oneDay.totalValueLockedUSD === '0' ? '1' : oneDay.totalValueLockedUSD)) * 100 : 0 // Part of TVL fix const tvlUpdated = current ? tvlToken0 * parseFloat(current.token0.derivedETH) * ethPriceUSD + tvlToken1 * parseFloat(current.token1.derivedETH) * ethPriceUSD : undefined if (tvlUpdated) { tvlUSD = tvlUpdated } const feeTier = current ? parseInt(current.feeTier) : 0 if (current) { accum[address] = { address, feeTier, liquidity: parseFloat(current.liquidity), sqrtPrice: parseFloat(current.sqrtPrice), tick: parseFloat(current.tick), token0: { address: current.token0.id, name: formatTokenName(current.token0.id, current.token0.name, activeNetwork), symbol: formatTokenSymbol(current.token0.id, current.token0.symbol, activeNetwork), decimals: parseInt(current.token0.decimals), derivedETH: parseFloat(current.token0.derivedETH), }, token1: { address: current.token1.id, name: formatTokenName(current.token1.id, current.token1.name, activeNetwork), symbol: formatTokenSymbol(current.token1.id, current.token1.symbol, activeNetwork), decimals: parseInt(current.token1.decimals), derivedETH: parseFloat(current.token1.derivedETH), }, token0Price: parseFloat(current.token0Price), token1Price: parseFloat(current.token1Price), volumeUSD, volumeUSDChange, volumeUSDWeek, tvlUSD, tvlUSDChange, tvlToken0, tvlToken1, } } return accum }, {}) return { loading: anyLoading, error: anyError, data: formatted, } } ================================================ FILE: src/data/pools/tickData.ts ================================================ import gql from 'graphql-tag' import JSBI from 'jsbi' import keyBy from 'lodash.keyby' import { TickMath, tickToPrice } from '@uniswap/v3-sdk' import { Token } from '@uniswap/sdk-core' import { ApolloClient, NormalizedCacheObject } from '@apollo/client' const PRICE_FIXED_DIGITS = 4 const DEFAULT_SURROUNDING_TICKS = 300 const FEE_TIER_TO_TICK_SPACING = (feeTier: string): number => { switch (feeTier) { case '10000': return 200 case '3000': return 60 case '500': return 10 case '100': return 1 default: throw Error(`Tick spacing for fee tier ${feeTier} undefined.`) } } interface TickPool { tick: string feeTier: string token0: { symbol: string id: string decimals: string } token1: { symbol: string id: string decimals: string } sqrtPrice: string liquidity: string } interface PoolResult { pool: TickPool } // Raw tick returned from GQL interface Tick { tickIdx: string liquidityGross: string liquidityNet: string price0: string price1: string } interface SurroundingTicksResult { ticks: Tick[] } // Tick with fields parsed to JSBIs, and active liquidity computed. export interface TickProcessed { liquidityGross: JSBI liquidityNet: JSBI tickIdx: number liquidityActive: JSBI price0: string price1: string } const fetchInitializedTicks = async ( poolAddress: string, tickIdxLowerBound: number, tickIdxUpperBound: number, client: ApolloClient, ): Promise<{ loading?: boolean; error?: boolean; ticks?: Tick[] }> => { const tickQuery = gql` query surroundingTicks( $poolAddress: String! $tickIdxLowerBound: BigInt! $tickIdxUpperBound: BigInt! $skip: Int! ) { ticks( subgraphError: allow first: 1000 skip: $skip where: { poolAddress: $poolAddress, tickIdx_lte: $tickIdxUpperBound, tickIdx_gte: $tickIdxLowerBound } ) { tickIdx liquidityGross liquidityNet price0 price1 } } ` let surroundingTicks: Tick[] = [] let surroundingTicksResult: Tick[] = [] let skip = 0 do { const { data, error, loading } = await client.query({ query: tickQuery, fetchPolicy: 'cache-first', variables: { poolAddress, tickIdxLowerBound, tickIdxUpperBound, skip, }, }) // console.log({ data, error, loading }, 'Result. Skip: ' + skip) if (loading) { continue } if (error) { return { error: Boolean(error), loading, ticks: surroundingTicksResult } } surroundingTicks = data.ticks surroundingTicksResult = surroundingTicksResult.concat(surroundingTicks) skip += 1000 } while (surroundingTicks.length > 0) return { ticks: surroundingTicksResult, loading: false, error: false } } export interface PoolTickData { ticksProcessed: TickProcessed[] feeTier: string tickSpacing: number activeTickIdx: number } const poolQuery = gql` query pool($poolAddress: String!) { pool(id: $poolAddress) { tick token0 { symbol id decimals } token1 { symbol id decimals } feeTier sqrtPrice liquidity } } ` export const fetchTicksSurroundingPrice = async ( poolAddress: string, client: ApolloClient, numSurroundingTicks = DEFAULT_SURROUNDING_TICKS, ): Promise<{ loading?: boolean error?: boolean data?: PoolTickData }> => { const { data: poolResult, error, loading, } = await client.query({ query: poolQuery, variables: { poolAddress, }, }) if (loading || error || !poolResult) { return { loading, error: Boolean(error), data: undefined, } } const { pool: { tick: poolCurrentTick, feeTier, liquidity, token0: { id: token0Address, decimals: token0Decimals }, token1: { id: token1Address, decimals: token1Decimals }, }, } = poolResult const poolCurrentTickIdx = parseInt(poolCurrentTick) const tickSpacing = FEE_TIER_TO_TICK_SPACING(feeTier) // The pools current tick isn't necessarily a tick that can actually be initialized. // Find the nearest valid tick given the tick spacing. const activeTickIdx = Math.floor(poolCurrentTickIdx / tickSpacing) * tickSpacing // Our search bounds must take into account fee spacing. i.e. for fee tier 1%, only // ticks with index 200, 400, 600, etc can be active. const tickIdxLowerBound = activeTickIdx - numSurroundingTicks * tickSpacing const tickIdxUpperBound = activeTickIdx + numSurroundingTicks * tickSpacing const initializedTicksResult = await fetchInitializedTicks(poolAddress, tickIdxLowerBound, tickIdxUpperBound, client) if (initializedTicksResult.error || initializedTicksResult.loading) { return { error: initializedTicksResult.error, loading: initializedTicksResult.loading, } } const { ticks: initializedTicks } = initializedTicksResult const tickIdxToInitializedTick = keyBy(initializedTicks, 'tickIdx') const token0 = new Token(1, token0Address, parseInt(token0Decimals)) const token1 = new Token(1, token1Address, parseInt(token1Decimals)) // console.log({ activeTickIdx, poolCurrentTickIdx }, 'Active ticks') // If the pool's tick is MIN_TICK (-887272), then when we find the closest // initializable tick to its left, the value would be smaller than MIN_TICK. // In this case we must ensure that the prices shown never go below/above. // what actual possible from the protocol. let activeTickIdxForPrice = activeTickIdx if (activeTickIdxForPrice < TickMath.MIN_TICK) { activeTickIdxForPrice = TickMath.MIN_TICK } if (activeTickIdxForPrice > TickMath.MAX_TICK) { activeTickIdxForPrice = TickMath.MAX_TICK } const activeTickProcessed: TickProcessed = { liquidityActive: JSBI.BigInt(liquidity), tickIdx: activeTickIdx, liquidityNet: JSBI.BigInt(0), price0: tickToPrice(token0, token1, activeTickIdxForPrice).toFixed(PRICE_FIXED_DIGITS), price1: tickToPrice(token1, token0, activeTickIdxForPrice).toFixed(PRICE_FIXED_DIGITS), liquidityGross: JSBI.BigInt(0), } // If our active tick happens to be initialized (i.e. there is a position that starts or // ends at that tick), ensure we set the gross and net. // correctly. const activeTick = tickIdxToInitializedTick[activeTickIdx] if (activeTick) { activeTickProcessed.liquidityGross = JSBI.BigInt(activeTick.liquidityGross) activeTickProcessed.liquidityNet = JSBI.BigInt(activeTick.liquidityNet) } enum Direction { ASC, DESC, } // Computes the numSurroundingTicks above or below the active tick. const computeSurroundingTicks = ( activeTickProcessed: TickProcessed, tickSpacing: number, numSurroundingTicks: number, direction: Direction, ) => { let previousTickProcessed: TickProcessed = { ...activeTickProcessed, } // Iterate outwards (either up or down depending on 'Direction') from the active tick, // building active liquidity for every tick. let processedTicks: TickProcessed[] = [] for (let i = 0; i < numSurroundingTicks; i++) { const currentTickIdx = direction == Direction.ASC ? previousTickProcessed.tickIdx + tickSpacing : previousTickProcessed.tickIdx - tickSpacing if (currentTickIdx < TickMath.MIN_TICK || currentTickIdx > TickMath.MAX_TICK) { break } const currentTickProcessed: TickProcessed = { liquidityActive: previousTickProcessed.liquidityActive, tickIdx: currentTickIdx, liquidityNet: JSBI.BigInt(0), price0: tickToPrice(token0, token1, currentTickIdx).toFixed(PRICE_FIXED_DIGITS), price1: tickToPrice(token1, token0, currentTickIdx).toFixed(PRICE_FIXED_DIGITS), liquidityGross: JSBI.BigInt(0), } // Check if there is an initialized tick at our current tick. // If so copy the gross and net liquidity from the initialized tick. const currentInitializedTick = tickIdxToInitializedTick[currentTickIdx.toString()] if (currentInitializedTick) { currentTickProcessed.liquidityGross = JSBI.BigInt(currentInitializedTick.liquidityGross) currentTickProcessed.liquidityNet = JSBI.BigInt(currentInitializedTick.liquidityNet) } // Update the active liquidity. // If we are iterating ascending and we found an initialized tick we immediately apply // it to the current processed tick we are building. // If we are iterating descending, we don't want to apply the net liquidity until the following tick. if (direction == Direction.ASC && currentInitializedTick) { currentTickProcessed.liquidityActive = JSBI.add( previousTickProcessed.liquidityActive, JSBI.BigInt(currentInitializedTick.liquidityNet), ) } else if (direction == Direction.DESC && JSBI.notEqual(previousTickProcessed.liquidityNet, JSBI.BigInt(0))) { // We are iterating descending, so look at the previous tick and apply any net liquidity. currentTickProcessed.liquidityActive = JSBI.subtract( previousTickProcessed.liquidityActive, previousTickProcessed.liquidityNet, ) } processedTicks.push(currentTickProcessed) previousTickProcessed = currentTickProcessed } if (direction == Direction.DESC) { processedTicks = processedTicks.reverse() } return processedTicks } const subsequentTicks: TickProcessed[] = computeSurroundingTicks( activeTickProcessed, tickSpacing, numSurroundingTicks, Direction.ASC, ) const previousTicks: TickProcessed[] = computeSurroundingTicks( activeTickProcessed, tickSpacing, numSurroundingTicks, Direction.DESC, ) const ticksProcessed = previousTicks.concat(activeTickProcessed).concat(subsequentTicks) return { data: { ticksProcessed, feeTier, tickSpacing, activeTickIdx, }, } } ================================================ FILE: src/data/pools/topPools.ts ================================================ import { useMemo } from 'react' import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' import { notEmpty } from 'utils' import { POOL_HIDE } from '../../constants' export const TOP_POOLS = gql` query topPools { pools(first: 50, orderBy: totalValueLockedUSD, orderDirection: desc, subgraphError: allow) { id } } ` interface TopPoolsResponse { pools: { id: string }[] } /** * Fetch top addresses by volume */ export function useTopPoolAddresses(): { loading: boolean error: boolean addresses: string[] | undefined } { const [currentNetwork] = useActiveNetworkVersion() const { dataClient } = useClients() const { loading, error, data } = useQuery(TOP_POOLS, { client: dataClient, fetchPolicy: 'cache-first', }) const formattedData = useMemo(() => { if (data) { return data.pools .map((p) => { if (POOL_HIDE[currentNetwork.id].includes(p.id.toLocaleLowerCase())) { return undefined } return p.id }) .filter(notEmpty) } else { return undefined } }, [currentNetwork.id, data]) return { loading: loading, error: Boolean(error), addresses: formattedData, } } ================================================ FILE: src/data/pools/transactions.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import gql from 'graphql-tag' import { Transaction, TransactionType } from 'types' import { formatTokenSymbol } from 'utils/tokens' const POOL_TRANSACTIONS = gql` query transactions($address: Bytes!) { mints(first: 100, orderBy: timestamp, orderDirection: desc, where: { pool: $address }, subgraphError: allow) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } owner sender origin amount0 amount1 amountUSD } swaps(first: 100, orderBy: timestamp, orderDirection: desc, where: { pool: $address }, subgraphError: allow) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } origin amount0 amount1 amountUSD } burns(first: 100, orderBy: timestamp, orderDirection: desc, where: { pool: $address }, subgraphError: allow) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } owner amount0 amount1 amountUSD } } ` interface TransactionResults { mints: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] swaps: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] burns: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } owner: string amount0: string amount1: string amountUSD: string }[] } export async function fetchPoolTransactions( address: string, client: ApolloClient, ): Promise<{ data: Transaction[] | undefined; error: boolean; loading: boolean }> { const { data, error, loading } = await client.query({ query: POOL_TRANSACTIONS, variables: { address: address, }, fetchPolicy: 'cache-first', }) if (error) { return { data: undefined, error: true, loading: false, } } if (loading && !data) { return { data: undefined, error: false, loading: true, } } const mints = data.mints.map((m) => { return { type: TransactionType.MINT, hash: m.transaction.id, timestamp: m.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const burns = data.burns.map((m) => { return { type: TransactionType.BURN, hash: m.transaction.id, timestamp: m.timestamp, sender: m.owner, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const swaps = data.swaps.map((m) => { return { type: TransactionType.SWAP, hash: m.transaction.id, timestamp: m.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) return { data: [...mints, ...burns, ...swaps], error: false, loading: false } } ================================================ FILE: src/data/protocol/chart.ts ================================================ import { ChartDayData } from '../../types/index' import { useState, useEffect } from 'react' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import weekOfYear from 'dayjs/plugin/weekOfYear' import gql from 'graphql-tag' import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' import { arbitrumClient, optimismClient } from 'apollo/client' import { SupportedNetwork } from 'constants/networks' import { useDerivedProtocolTVLHistory } from './derived' // format dayjs with the libraries that we need dayjs.extend(utc) dayjs.extend(weekOfYear) const ONE_DAY_UNIX = 24 * 60 * 60 const GLOBAL_CHART = gql` query uniswapDayDatas($startTime: Int!, $skip: Int!) { uniswapDayDatas( first: 1000 skip: $skip subgraphError: allow where: { date_gt: $startTime } orderBy: date orderDirection: asc ) { id date volumeUSD tvlUSD } } ` interface ChartResults { uniswapDayDatas: { date: number volumeUSD: string tvlUSD: string }[] } async function fetchChartData(client: ApolloClient) { let data: { date: number volumeUSD: string tvlUSD: string }[] = [] const startTimestamp = client === arbitrumClient ? 1630423606 : client === optimismClient ? 1636697130 : 1619170975 const endTimestamp = dayjs.utc().unix() let error = false let skip = 0 let allFound = false try { while (!allFound) { const { data: chartResData, error, loading, } = await client.query({ query: GLOBAL_CHART, variables: { startTime: startTimestamp, skip, }, fetchPolicy: 'cache-first', }) if (!loading) { skip += 1000 if (chartResData.uniswapDayDatas.length < 1000 || error) { allFound = true } if (chartResData) { data = data.concat(chartResData.uniswapDayDatas) } } } } catch { error = true } if (data) { const formattedExisting = data.reduce((accum: { [date: number]: ChartDayData }, dayData) => { const roundedDate = parseInt((dayData.date / ONE_DAY_UNIX).toFixed(0)) accum[roundedDate] = { date: dayData.date, volumeUSD: parseFloat(dayData.volumeUSD), tvlUSD: parseFloat(dayData.tvlUSD), } return accum }, {}) const firstEntry = formattedExisting[parseInt(Object.keys(formattedExisting)[0])] // fill in empty days ( there will be no day datas if no trades made that day ) let timestamp = firstEntry?.date ?? startTimestamp let latestTvl = firstEntry?.tvlUSD ?? 0 while (timestamp < endTimestamp - ONE_DAY_UNIX) { const nextDay = timestamp + ONE_DAY_UNIX const currentDayIndex = parseInt((nextDay / ONE_DAY_UNIX).toFixed(0)) if (!Object.keys(formattedExisting).includes(currentDayIndex.toString())) { formattedExisting[currentDayIndex] = { date: nextDay, volumeUSD: 0, tvlUSD: latestTvl, } } else { latestTvl = formattedExisting[currentDayIndex].tvlUSD } timestamp = nextDay } if (client === optimismClient) { formattedExisting[18855] = { ...formattedExisting[18855], tvlUSD: 13480000, } formattedExisting[18856] = { ...formattedExisting[18856], tvlUSD: 13480000, } } return { data: Object.values(formattedExisting), error: false, } } else { return { data: undefined, error, } } } /** * Fetch historic chart data */ export function useFetchGlobalChartData(): { error: boolean data: ChartDayData[] | undefined } { const [data, setData] = useState<{ [network: string]: ChartDayData[] | undefined }>() const [error, setError] = useState(false) const { dataClient } = useClients() const derivedData = useDerivedProtocolTVLHistory() const [activeNetworkVersion] = useActiveNetworkVersion() const shouldUserDerivedData = activeNetworkVersion.id === SupportedNetwork.ETHEREUM || activeNetworkVersion.id === SupportedNetwork.POLYGON const indexedData = data?.[activeNetworkVersion.id] // @TODO: remove this once we have fix for mainnet TVL issue const formattedData = shouldUserDerivedData ? derivedData : indexedData useEffect(() => { async function fetch() { const { data, error } = await fetchChartData(dataClient) if (data && !error) { setData({ [activeNetworkVersion.id]: data, }) } else if (error) { setError(true) } } if (!indexedData && !error && !shouldUserDerivedData) { fetch() } }, [data, error, dataClient, indexedData, activeNetworkVersion.id, shouldUserDerivedData]) return { error, data: formattedData, } } ================================================ FILE: src/data/protocol/derived.ts ================================================ import { SupportedNetwork } from 'constants/networks' import { fetchPoolChartData } from 'data/pools/chartData' import { usePoolDatas } from 'data/pools/poolData' import { useTopPoolAddresses } from 'data/pools/topPools' import { useEffect, useMemo, useState } from 'react' import { useDispatch } from 'react-redux' import { AppDispatch } from 'state' import { useActiveNetworkVersion, useDataClient } from 'state/application/hooks' import { updatePoolChartData } from 'state/pools/actions' import { PoolChartEntry, PoolData } from 'state/pools/reducer' import { ChartDayData } from 'types' import { POOL_HIDE } from '../../constants' /** * Calculates offset amount to avoid inaccurate USD data for global TVL. * @returns TVL value in USD */ export function useTVLOffset() { const [currentNetwork] = useActiveNetworkVersion() const { data } = usePoolDatas(POOL_HIDE[currentNetwork.id]) const tvlOffset = useMemo(() => { if (!data) return undefined return Object.keys(data).reduce((accum: number, poolAddress) => { const poolData: PoolData = data[poolAddress] return accum + poolData.tvlUSD }, 0) }, [data]) return tvlOffset } /** * Fecthes and formats data for pools that result in incorrect USD TVL. * * Note: not used currently but useful for debugging. * * @returns Chart data by day for values to offset accurate USD. */ export function useDerivedOffsetTVLHistory() { const dataClient = useDataClient() const [chartData, setChartData] = useState<{ [key: number]: ChartDayData } | undefined>(undefined) const dispatch = useDispatch() const [currentNetwork] = useActiveNetworkVersion() useEffect(() => { async function fetchAll() { // fetch all data for each pool const data = await POOL_HIDE[currentNetwork.id].reduce( async (accumP: Promise<{ [key: number]: ChartDayData }>, address) => { const accum = await accumP const { data } = await fetchPoolChartData(address, dataClient) if (!data) return accum dispatch(updatePoolChartData({ poolAddress: address, chartData: data, networkId: SupportedNetwork.ETHEREUM })) data.map((poolDayData: PoolChartEntry) => { const { date, totalValueLockedUSD, volumeUSD } = poolDayData const roundedDate = date if (!accum[roundedDate]) { accum[roundedDate] = { tvlUSD: 0, date: roundedDate, volumeUSD: 0, } } accum[roundedDate].tvlUSD = accum[roundedDate].tvlUSD + totalValueLockedUSD accum[roundedDate].volumeUSD = accum[roundedDate].volumeUSD + volumeUSD }) return accum }, Promise.resolve({} as { [key: number]: ChartDayData }), ) // Format as array setChartData(data) } if (!chartData) { fetchAll() } }, [chartData, currentNetwork.id, dataClient, dispatch]) return chartData } // # of pools to include in historical chart volume and TVL data const POOL_COUNT_FOR_AGGREGATE = 20 /** * Derives historical TVL data for top 50 pools. * @returns Chart data for aggregate Uniswap TVL over time. */ export function useDerivedProtocolTVLHistory() { const dataClient = useDataClient() const { addresses } = useTopPoolAddresses() const dispatch = useDispatch() const [currentNetwork] = useActiveNetworkVersion() const [chartData, setChartData] = useState<{ [key: string]: ChartDayData[] } | undefined>(undefined) useEffect(() => { async function fetchAll() { if (!addresses) { return } // fetch all data for each pool const data = await addresses .slice(0, POOL_COUNT_FOR_AGGREGATE) // @TODO: must be replaced with aggregate with subgraph data fixed. .reduce( async (accumP: Promise<{ [key: number]: ChartDayData }>, address) => { const accum = await accumP if (POOL_HIDE[currentNetwork.id].includes(address)) { return accum } const { data } = await fetchPoolChartData(address, dataClient) if (!data) return accum dispatch(updatePoolChartData({ poolAddress: address, chartData: data, networkId: currentNetwork.id })) data.map((poolDayData: PoolChartEntry) => { const { date, totalValueLockedUSD, volumeUSD } = poolDayData const roundedDate = date if (!accum[roundedDate]) { accum[roundedDate] = { tvlUSD: 0, date: roundedDate, volumeUSD: 0, } } accum[roundedDate].tvlUSD = accum[roundedDate].tvlUSD + totalValueLockedUSD accum[roundedDate].volumeUSD = accum[roundedDate].volumeUSD + volumeUSD }) return accum }, Promise.resolve({} as { [key: number]: ChartDayData }), ) // Format as array setChartData({ ...chartData, [currentNetwork.id]: Object.values(data) }) } if (!chartData) { fetchAll() } }, [addresses, chartData, currentNetwork.id, dataClient, dispatch]) return chartData?.[currentNetwork.id] } ================================================ FILE: src/data/protocol/overview.ts ================================================ import { getPercentChange } from '../../utils/data' import { ProtocolData } from '../../state/protocol/reducer' import gql from 'graphql-tag' import { useQuery, ApolloClient, NormalizedCacheObject } from '@apollo/client' import { useDeltaTimestamps } from 'utils/queries' import { useBlocksFromTimestamps } from 'hooks/useBlocksFromTimestamps' import { useMemo } from 'react' import { useClients } from 'state/application/hooks' import { useTVLOffset } from './derived' export const GLOBAL_DATA = (block?: string) => { const queryString = ` query uniswapFactories { factories( ${block !== undefined ? `block: { number: ${block}}` : ``} first: 1, subgraphError: allow) { txCount totalVolumeUSD totalFeesUSD totalValueLockedUSD } }` return gql(queryString) } interface GlobalResponse { factories: { txCount: string totalVolumeUSD: string totalFeesUSD: string totalValueLockedUSD: string }[] } export function useFetchProtocolData( dataClientOverride?: ApolloClient, blockClientOverride?: ApolloClient, ): { loading: boolean error: boolean data: ProtocolData | undefined } { // get appropriate clients if override needed const { dataClient, blockClient } = useClients() const activeDataClient = dataClientOverride ?? dataClient const activeBlockClient = blockClientOverride ?? blockClient // Aggregate TVL in inaccurate pools. Offset Uniswap aggregate TVL by this amount. const tvlOffset = useTVLOffset() // get blocks from historic timestamps const [t24, t48] = useDeltaTimestamps() const { blocks, error: blockError } = useBlocksFromTimestamps([t24, t48], activeBlockClient) const [block24, block48] = blocks ?? [] // fetch all data const { loading, error, data } = useQuery(GLOBAL_DATA(), { client: activeDataClient }) const { loading: loading24, error: error24, data: data24, } = useQuery(GLOBAL_DATA(block24?.number ?? 0), { client: activeDataClient }) const { loading: loading48, error: error48, data: data48, } = useQuery(GLOBAL_DATA(block48?.number ?? 0), { client: activeDataClient }) const anyError = Boolean(error || error24 || error48 || blockError) const anyLoading = Boolean(loading || loading24 || loading48) const parsed = data?.factories?.[0] const parsed24 = data24?.factories?.[0] const parsed48 = data48?.factories?.[0] const formattedData: ProtocolData | undefined = useMemo(() => { if (anyError || anyLoading || !parsed || !blocks || tvlOffset === undefined) { return undefined } // volume data const volumeUSD = parsed && parsed24 ? parseFloat(parsed.totalVolumeUSD) - parseFloat(parsed24.totalVolumeUSD) : parseFloat(parsed.totalVolumeUSD) const volumeOneWindowAgo = parsed24?.totalVolumeUSD && parsed48?.totalVolumeUSD ? parseFloat(parsed24.totalVolumeUSD) - parseFloat(parsed48.totalVolumeUSD) : undefined const volumeUSDChange = volumeUSD && volumeOneWindowAgo ? ((volumeUSD - volumeOneWindowAgo) / volumeOneWindowAgo) * 100 : 0 // total value locked const tvlUSDChange = getPercentChange(parsed?.totalValueLockedUSD, parsed24?.totalValueLockedUSD) // 24H transactions const txCount = parsed && parsed24 ? parseFloat(parsed.txCount) - parseFloat(parsed24.txCount) : parseFloat(parsed.txCount) const txCountOneWindowAgo = parsed24 && parsed48 ? parseFloat(parsed24.txCount) - parseFloat(parsed48.txCount) : undefined const txCountChange = txCount && txCountOneWindowAgo ? getPercentChange(txCount.toString(), txCountOneWindowAgo.toString()) : 0 const feesOneWindowAgo = parsed24 && parsed48 ? parseFloat(parsed24.totalFeesUSD) - parseFloat(parsed48.totalFeesUSD) : undefined const feesUSD = parsed && parsed24 ? parseFloat(parsed.totalFeesUSD) - parseFloat(parsed24.totalFeesUSD) : parseFloat(parsed.totalFeesUSD) const feeChange = feesUSD && feesOneWindowAgo ? getPercentChange(feesUSD.toString(), feesOneWindowAgo.toString()) : 0 return { volumeUSD, volumeUSDChange: typeof volumeUSDChange === 'number' ? volumeUSDChange : 0, tvlUSD: parseFloat(parsed?.totalValueLockedUSD) - tvlOffset, tvlUSDChange, feesUSD, feeChange, txCount, txCountChange, } }, [anyError, anyLoading, blocks, parsed, parsed24, parsed48, tvlOffset]) return { loading: anyLoading, error: anyError, data: formattedData, } } ================================================ FILE: src/data/protocol/transactions.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import gql from 'graphql-tag' import { Transaction, TransactionType } from 'types' import { formatTokenSymbol } from 'utils/tokens' const GLOBAL_TRANSACTIONS = gql` query transactions { transactions(first: 500, orderBy: timestamp, orderDirection: desc, subgraphError: allow) { id timestamp mints { pool { token0 { id symbol } token1 { id symbol } } owner sender origin amount0 amount1 amountUSD } swaps { pool { token0 { id symbol } token1 { id symbol } } origin amount0 amount1 amountUSD } burns { pool { token0 { id symbol } token1 { id symbol } } owner origin amount0 amount1 amountUSD } } } ` type TransactionEntry = { timestamp: string id: string mints: { pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] swaps: { pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] burns: { pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } owner: string origin: string amount0: string amount1: string amountUSD: string }[] } interface TransactionResults { transactions: TransactionEntry[] } export async function fetchTopTransactions( client: ApolloClient, ): Promise { try { const { data, error, loading } = await client.query({ query: GLOBAL_TRANSACTIONS, fetchPolicy: 'cache-first', }) if (error || loading || !data) { return undefined } const formatted = data.transactions.reduce((accum: Transaction[], t: TransactionEntry) => { const mintEntries = t.mints.map((m) => { return { type: TransactionType.MINT, hash: t.id, timestamp: t.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const burnEntries = t.burns.map((m) => { return { type: TransactionType.BURN, hash: t.id, timestamp: t.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const swapEntries = t.swaps.map((m) => { return { hash: t.id, type: TransactionType.SWAP, timestamp: t.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) accum = [...accum, ...mintEntries, ...burnEntries, ...swapEntries] return accum }, []) return formatted } catch { return undefined } } ================================================ FILE: src/data/search/index.ts ================================================ import { useAllTokenData } from 'state/tokens/hooks' import { TokenData } from 'state/tokens/reducer' import { useFetchedTokenDatas } from 'data/tokens/tokenData' import gql from 'graphql-tag' import { useState, useEffect, useMemo } from 'react' import { client } from 'apollo/client' import { usePoolDatas, useAllPoolData } from 'state/pools/hooks' import { PoolData } from 'state/pools/reducer' import { notEmpty, escapeRegExp } from 'utils' export const TOKEN_SEARCH = gql` query tokens($value: String, $id: String) { asSymbol: tokens( where: { symbol_contains: $value } orderBy: totalValueLockedUSD orderDirection: desc subgraphError: allow ) { id symbol name totalValueLockedUSD } asName: tokens( where: { name_contains: $value } orderBy: totalValueLockedUSD orderDirection: desc subgraphError: allow ) { id symbol name totalValueLockedUSD } asAddress: tokens(where: { id: $id }, orderBy: totalValueLockedUSD, orderDirection: desc, subgraphError: allow) { id symbol name totalValueLockedUSD } } ` export const POOL_SEARCH = gql` query pools($tokens: [Bytes]!, $id: String) { as0: pools(where: { token0_in: $tokens }, subgraphError: allow) { id feeTier token0 { id symbol name } token1 { id symbol name } } as1: pools(where: { token1_in: $tokens }, subgraphError: allow) { id feeTier token0 { id symbol name } token1 { id symbol name } } asAddress: pools(where: { id: $id }, subgraphError: allow) { id feeTier token0 { id symbol name } token1 { id symbol name } } } ` interface TokenRes { asSymbol: { id: string symbol: string name: string totalValueLockedUSD: string }[] asName: { id: string symbol: string name: string totalValueLockedUSD: string }[] asAddress: { id: string symbol: string name: string totalValueLockedUSD: string }[] } interface PoolResFields { id: string feeTier: string token0: { id: string symbol: string name: string } token1: { id: string symbol: string name: string } } interface PoolRes { as0: PoolResFields[] as1: PoolResFields[] asAddress: PoolResFields[] } export function useFetchSearchResults(value: string): { tokens: TokenData[] pools: PoolData[] loading: boolean } { const allTokens = useAllTokenData() const allPools = useAllPoolData() const [tokenData, setTokenData] = useState() const [poolData, setPoolData] = useState() // fetch data based on search input useEffect(() => { async function fetch() { try { const tokens = await client.query({ query: TOKEN_SEARCH, variables: { value: value ? value.toUpperCase() : '', id: value, }, }) const pools = await client.query({ query: POOL_SEARCH, variables: { tokens: tokens.data.asSymbol?.map((t) => t.id), id: value, }, }) if (tokens.data) { setTokenData(tokens.data) } if (pools.data) { setPoolData(pools.data) } } catch (e) { console.log(e) } } if (value && value.length > 0) { fetch() } }, [value]) const allFetchedTokens = useMemo(() => { if (tokenData) { return [...tokenData.asAddress, ...tokenData.asName, ...tokenData.asSymbol] } return [] }, [tokenData]) const allFetchedPools = useMemo(() => { if (poolData) { return [...poolData.asAddress, ...poolData.as0, ...poolData.as1] } return [] }, [poolData]) // format as token and pool datas const { data: tokenFullDatas, loading: tokenFullLoading } = useFetchedTokenDatas(allFetchedTokens.map((t) => t.id)) const poolDatasFull = usePoolDatas(allFetchedPools.map((p) => p.id)) const formattedTokens = useMemo(() => (tokenFullDatas ? Object.values(tokenFullDatas) : []), [tokenFullDatas]) const newTokens = useMemo(() => { return formattedTokens.filter((t) => !Object.keys(allTokens).includes(t.address)) }, [allTokens, formattedTokens]) const combinedTokens = useMemo(() => { return [ ...newTokens, ...Object.values(allTokens) .map((t) => t.data) .filter(notEmpty), ] }, [allTokens, newTokens]) const filteredSortedTokens = useMemo(() => { return combinedTokens.filter((t) => { const regexMatches = Object.keys(t).map((tokenEntryKey) => { const isAddress = value.slice(0, 2) === '0x' if (tokenEntryKey === 'address' && isAddress) { return t[tokenEntryKey].match(new RegExp(escapeRegExp(value), 'i')) } if (tokenEntryKey === 'symbol' && !isAddress) { return t[tokenEntryKey].match(new RegExp(escapeRegExp(value), 'i')) } if (tokenEntryKey === 'name' && !isAddress) { return t[tokenEntryKey].match(new RegExp(escapeRegExp(value), 'i')) } return false }) return regexMatches.some((m) => m) }) }, [combinedTokens, value]) const newPools = useMemo(() => { return poolDatasFull.filter((p) => !Object.keys(allPools).includes(p.address)) }, [allPools, poolDatasFull]) const combinedPools = useMemo(() => { return [ ...newPools, ...Object.values(allPools) .map((p) => p.data) .filter(notEmpty), ] }, [allPools, newPools]) const filteredSortedPools = useMemo(() => { return combinedPools.filter((t) => { const regexMatches = Object.keys(t).map((key) => { const isAddress = value.slice(0, 2) === '0x' if (key === 'address' && isAddress) { return t[key].match(new RegExp(escapeRegExp(value), 'i')) } if ((key === 'token0' || key === 'token1') && !isAddress) { return ( t[key].name.match(new RegExp(escapeRegExp(value), 'i')) || t[key].symbol.toLocaleLowerCase().match(new RegExp(escapeRegExp(value.toLocaleLowerCase()), 'i')) ) } return false }) return regexMatches.some((m) => m) }) }, [combinedPools, value]) return { tokens: filteredSortedTokens, pools: filteredSortedPools, loading: tokenFullLoading, } } ================================================ FILE: src/data/tokens/chartData.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import weekOfYear from 'dayjs/plugin/weekOfYear' import gql from 'graphql-tag' import { TokenChartEntry } from 'state/tokens/reducer' // format dayjs with the libraries that we need dayjs.extend(utc) dayjs.extend(weekOfYear) const ONE_DAY_UNIX = 24 * 60 * 60 const TOKEN_CHART = gql` query tokenDayDatas($startTime: Int!, $skip: Int!, $address: Bytes!) { tokenDayDatas( first: 1000 skip: $skip where: { token: $address, date_gt: $startTime } orderBy: date orderDirection: asc subgraphError: allow ) { date volumeUSD totalValueLockedUSD } } ` interface ChartResults { tokenDayDatas: { date: number volumeUSD: string totalValueLockedUSD: string }[] } export async function fetchTokenChartData(address: string, client: ApolloClient) { let data: { date: number volumeUSD: string totalValueLockedUSD: string }[] = [] const startTimestamp = 1619170975 const endTimestamp = dayjs.utc().unix() let error = false let skip = 0 let allFound = false try { while (!allFound) { const { data: chartResData, error, loading, } = await client.query({ query: TOKEN_CHART, variables: { address: address, startTime: startTimestamp, skip, }, fetchPolicy: 'cache-first', }) if (!loading) { skip += 1000 if (chartResData.tokenDayDatas.length < 1000 || error) { allFound = true } if (chartResData) { data = data.concat(chartResData.tokenDayDatas) } } } } catch { error = true } if (data) { const formattedExisting = data.reduce((accum: { [date: number]: TokenChartEntry }, dayData) => { const roundedDate = parseInt((dayData.date / ONE_DAY_UNIX).toFixed(0)) accum[roundedDate] = { date: dayData.date, volumeUSD: parseFloat(dayData.volumeUSD), totalValueLockedUSD: parseFloat(dayData.totalValueLockedUSD), } return accum }, {}) const firstEntry = formattedExisting[parseInt(Object.keys(formattedExisting)[0])] // fill in empty days ( there will be no day datas if no trades made that day ) let timestamp = firstEntry?.date ?? startTimestamp let latestTvl = firstEntry?.totalValueLockedUSD ?? 0 while (timestamp < endTimestamp - ONE_DAY_UNIX) { const nextDay = timestamp + ONE_DAY_UNIX const currentDayIndex = parseInt((nextDay / ONE_DAY_UNIX).toFixed(0)) if (!Object.keys(formattedExisting).includes(currentDayIndex.toString())) { formattedExisting[currentDayIndex] = { date: nextDay, volumeUSD: 0, totalValueLockedUSD: latestTvl, } } else { latestTvl = formattedExisting[currentDayIndex].totalValueLockedUSD } timestamp = nextDay } const dateMap = Object.keys(formattedExisting).map((key) => { return formattedExisting[parseInt(key)] }) return { data: dateMap, error: false, } } else { return { data: undefined, error, } } } ================================================ FILE: src/data/tokens/poolsForToken.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import gql from 'graphql-tag' export const POOLS_FOR_TOKEN = gql` query topPools($address: Bytes!) { asToken0: pools( first: 200 orderBy: totalValueLockedUSD orderDirection: desc where: { token0: $address } subgraphError: allow ) { id } asToken1: pools( first: 200 orderBy: totalValueLockedUSD orderDirection: desc where: { token1: $address } subgraphError: allow ) { id } } ` interface PoolsForTokenResponse { asToken0: { id: string }[] asToken1: { id: string }[] } /** * Fetch top addresses by volume */ export async function fetchPoolsForToken( address: string, client: ApolloClient, ): Promise<{ loading: boolean error: boolean addresses: string[] | undefined }> { try { const { loading, error, data } = await client.query({ query: POOLS_FOR_TOKEN, variables: { address: address, }, fetchPolicy: 'cache-first', }) if (loading || error || !data) { return { loading, error: Boolean(error), addresses: undefined, } } const formattedData = data.asToken0.concat(data.asToken1).map((p) => p.id) return { loading, error: Boolean(error), addresses: formattedData, } } catch { return { loading: false, error: true, addresses: undefined, } } } ================================================ FILE: src/data/tokens/priceData.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import weekOfYear from 'dayjs/plugin/weekOfYear' import gql from 'graphql-tag' import { getBlocksFromTimestamps } from 'hooks/useBlocksFromTimestamps' import { PriceChartEntry } from 'types' // format dayjs with the libraries that we need dayjs.extend(utc) dayjs.extend(weekOfYear) export const PRICES_BY_BLOCK = (tokenAddress: string, blocks: any) => { let queryString = 'query blocks {' queryString += blocks.map( (block: any) => ` t${block.timestamp}:token(id:"${tokenAddress}", block: { number: ${block.number} }, subgraphError: allow) { derivedETH } `, ) queryString += ',' queryString += blocks.map( (block: any) => ` b${block.timestamp}: bundle(id:"1", block: { number: ${block.number} }, subgraphError: allow) { ethPriceUSD } `, ) queryString += '}' return gql(queryString) } const PRICE_CHART = gql` query tokenHourDatas($startTime: Int!, $skip: Int!, $address: Bytes!) { tokenHourDatas( first: 100 skip: $skip where: { token: $address, periodStartUnix_gt: $startTime } orderBy: periodStartUnix orderDirection: asc ) { periodStartUnix high low open close } } ` interface PriceResults { tokenHourDatas: { periodStartUnix: number high: string low: string open: string close: string }[] } export async function fetchTokenPriceData( address: string, interval: number, startTimestamp: number, dataClient: ApolloClient, blockClient: ApolloClient, ): Promise<{ data: PriceChartEntry[] error: boolean }> { // start and end bounds try { const endTimestamp = dayjs.utc().unix() if (!startTimestamp) { console.log('Error constructing price start timestamp') return { data: [], error: false, } } // create an array of hour start times until we reach current hour const timestamps = [] let time = startTimestamp while (time <= endTimestamp) { timestamps.push(time) time += interval } // backout if invalid timestamp format if (timestamps.length === 0) { return { data: [], error: false, } } // fetch blocks based on timestamp const blocks = await getBlocksFromTimestamps(timestamps, blockClient, 500) if (!blocks || blocks.length === 0) { console.log('Error fetching blocks') return { data: [], error: false, } } let data: { periodStartUnix: number high: string low: string open: string close: string }[] = [] let skip = 0 let allFound = false while (!allFound) { const { data: priceData, errors, loading, } = await dataClient.query({ query: PRICE_CHART, variables: { address: address, startTime: startTimestamp, skip, }, fetchPolicy: 'no-cache', }) if (!loading) { skip += 100 if ((priceData && priceData.tokenHourDatas.length < 100) || errors) { allFound = true } if (priceData) { data = data.concat(priceData.tokenHourDatas) } } } const formattedHistory = data.map((d) => { return { time: d.periodStartUnix, open: parseFloat(d.open), close: parseFloat(d.close), high: parseFloat(d.high), low: parseFloat(d.low), } }) return { data: formattedHistory, error: false, } } catch (e) { console.log(e) return { data: [], error: true, } } } ================================================ FILE: src/data/tokens/tokenData.ts ================================================ import { getPercentChange } from './../../utils/data' import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import { useDeltaTimestamps } from 'utils/queries' import { useBlocksFromTimestamps } from 'hooks/useBlocksFromTimestamps' import { get2DayChange } from 'utils/data' import { TokenData } from 'state/tokens/reducer' import { useEthPrices } from 'hooks/useEthPrices' import { formatTokenSymbol, formatTokenName } from 'utils/tokens' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' export const TOKENS_BULK = (block: number | undefined, tokens: string[]) => { let tokenString = `[` tokens.map((address) => { return (tokenString += `"${address}",`) }) tokenString += ']' const queryString = ` query tokens { tokens(where: {id_in: ${tokenString}},` + (block ? `block: {number: ${block}} ,` : ``) + ` orderBy: totalValueLockedUSD, orderDirection: desc, subgraphError: allow) { id symbol name derivedETH volumeUSD volume txCount totalValueLocked feesUSD totalValueLockedUSD } } ` return gql(queryString) } interface TokenFields { id: string symbol: string name: string derivedETH: string volumeUSD: string volume: string feesUSD: string txCount: string totalValueLocked: string totalValueLockedUSD: string } interface TokenDataResponse { tokens: TokenFields[] bundles: { ethPriceUSD: string }[] } /** * Fetch top addresses by volume */ export function useFetchedTokenDatas(tokenAddresses: string[]): { loading: boolean error: boolean data: | { [address: string]: TokenData } | undefined } { const [activeNetwork] = useActiveNetworkVersion() const { dataClient } = useClients() // get blocks from historic timestamps const [t24, t48, tWeek] = useDeltaTimestamps() const { blocks, error: blockError } = useBlocksFromTimestamps([t24, t48, tWeek]) const [block24, block48, blockWeek] = blocks ?? [] const ethPrices = useEthPrices() const { loading, error, data } = useQuery(TOKENS_BULK(undefined, tokenAddresses), { client: dataClient, }) const { loading: loading24, error: error24, data: data24, } = useQuery(TOKENS_BULK(parseInt(block24?.number), tokenAddresses), { client: dataClient, }) const { loading: loading48, error: error48, data: data48, } = useQuery(TOKENS_BULK(parseInt(block48?.number), tokenAddresses), { client: dataClient, }) const { loading: loadingWeek, error: errorWeek, data: dataWeek, } = useQuery(TOKENS_BULK(parseInt(blockWeek?.number), tokenAddresses), { client: dataClient, }) const anyError = Boolean(error || error24 || error48 || blockError || errorWeek) const anyLoading = Boolean(loading || loading24 || loading48 || loadingWeek || !blocks) if (!ethPrices) { return { loading: true, error: false, data: undefined, } } // return early if not all data yet if (anyError || anyLoading) { return { loading: anyLoading, error: anyError, data: undefined, } } const parsed = data?.tokens ? data.tokens.reduce((accum: { [address: string]: TokenFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsed24 = data24?.tokens ? data24.tokens.reduce((accum: { [address: string]: TokenFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsed48 = data48?.tokens ? data48.tokens.reduce((accum: { [address: string]: TokenFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} const parsedWeek = dataWeek?.tokens ? dataWeek.tokens.reduce((accum: { [address: string]: TokenFields }, poolData) => { accum[poolData.id] = poolData return accum }, {}) : {} // format data and calculate daily changes const formatted = tokenAddresses.reduce((accum: { [address: string]: TokenData }, address) => { const current: TokenFields | undefined = parsed[address] const oneDay: TokenFields | undefined = parsed24[address] const twoDay: TokenFields | undefined = parsed48[address] const week: TokenFields | undefined = parsedWeek[address] const [volumeUSD, volumeUSDChange] = current && oneDay && twoDay ? get2DayChange(current.volumeUSD, oneDay.volumeUSD, twoDay.volumeUSD) : current ? [parseFloat(current.volumeUSD), 0] : [0, 0] const volumeUSDWeek = current && week ? parseFloat(current.volumeUSD) - parseFloat(week.volumeUSD) : current ? parseFloat(current.volumeUSD) : 0 const tvlUSD = current ? parseFloat(current.totalValueLockedUSD) : 0 const tvlUSDChange = getPercentChange(current?.totalValueLockedUSD, oneDay?.totalValueLockedUSD) const tvlToken = current ? parseFloat(current.totalValueLocked) : 0 const priceUSD = current ? parseFloat(current.derivedETH) * ethPrices.current : 0 const priceUSDOneDay = oneDay ? parseFloat(oneDay.derivedETH) * ethPrices.oneDay : 0 const priceUSDWeek = week ? parseFloat(week.derivedETH) * ethPrices.week : 0 const priceUSDChange = priceUSD && priceUSDOneDay ? getPercentChange(priceUSD.toString(), priceUSDOneDay.toString()) : 0 const priceUSDChangeWeek = priceUSD && priceUSDWeek ? getPercentChange(priceUSD.toString(), priceUSDWeek.toString()) : 0 const txCount = current && oneDay ? parseFloat(current.txCount) - parseFloat(oneDay.txCount) : current ? parseFloat(current.txCount) : 0 const feesUSD = current && oneDay ? parseFloat(current.feesUSD) - parseFloat(oneDay.feesUSD) : current ? parseFloat(current.feesUSD) : 0 accum[address] = { exists: !!current, address, name: current ? formatTokenName(address, current.name, activeNetwork) : '', symbol: current ? formatTokenSymbol(address, current.symbol, activeNetwork) : '', volumeUSD, volumeUSDChange, volumeUSDWeek, txCount, tvlUSD, feesUSD, tvlUSDChange, tvlToken, priceUSD, priceUSDChange, priceUSDChangeWeek, } return accum }, {}) return { loading: anyLoading, error: anyError, data: formatted, } } ================================================ FILE: src/data/tokens/topTokens.ts ================================================ import { useMemo } from 'react' import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import { useClients } from 'state/application/hooks' export const TOP_TOKENS = gql` query topPools { tokens(first: 50, orderBy: totalValueLockedUSD, orderDirection: desc, subgraphError: allow) { id } } ` interface TopTokensResponse { tokens: { id: string }[] } /** * Fetch top addresses by volume */ export function useTopTokenAddresses(): { loading: boolean error: boolean addresses: string[] | undefined } { const { dataClient } = useClients() const { loading, error, data } = useQuery(TOP_TOKENS, { client: dataClient }) const formattedData = useMemo(() => { if (data) { return data.tokens.map((t) => t.id) } else { return undefined } }, [data]) return { loading: loading, error: Boolean(error), addresses: formattedData, } } ================================================ FILE: src/data/tokens/transactions.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import gql from 'graphql-tag' import { Transaction, TransactionType } from 'types' import { formatTokenSymbol } from 'utils/tokens' const GLOBAL_TRANSACTIONS = gql` query transactions($address: Bytes!) { mintsAs0: mints( first: 500 orderBy: timestamp orderDirection: desc where: { token0: $address } subgraphError: allow ) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } owner sender origin amount0 amount1 amountUSD } mintsAs1: mints( first: 500 orderBy: timestamp orderDirection: desc where: { token0: $address } subgraphError: allow ) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } owner sender origin amount0 amount1 amountUSD } swapsAs0: swaps( first: 500 orderBy: timestamp orderDirection: desc where: { token0: $address } subgraphError: allow ) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } origin amount0 amount1 amountUSD } swapsAs1: swaps( first: 500 orderBy: timestamp orderDirection: desc where: { token1: $address } subgraphError: allow ) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } origin amount0 amount1 amountUSD } burnsAs0: burns( first: 500 orderBy: timestamp orderDirection: desc where: { token0: $address } subgraphError: allow ) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } owner amount0 amount1 amountUSD } burnsAs1: burns( first: 500 orderBy: timestamp orderDirection: desc where: { token1: $address } subgraphError: allow ) { timestamp transaction { id } pool { token0 { id symbol } token1 { id symbol } } owner amount0 amount1 amountUSD } } ` interface TransactionResults { mintsAs0: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] mintsAs1: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] swapsAs0: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] swapsAs1: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } origin: string amount0: string amount1: string amountUSD: string }[] burnsAs0: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } owner: string amount0: string amount1: string amountUSD: string }[] burnsAs1: { timestamp: string transaction: { id: string } pool: { token0: { id: string symbol: string } token1: { id: string symbol: string } } owner: string amount0: string amount1: string amountUSD: string }[] } export async function fetchTokenTransactions( address: string, client: ApolloClient, ): Promise<{ data: Transaction[] | undefined; error: boolean; loading: boolean }> { try { const { data, error, loading } = await client.query({ query: GLOBAL_TRANSACTIONS, variables: { address: address, }, fetchPolicy: 'cache-first', }) if (error) { return { data: undefined, error: true, loading: false, } } if (loading && !data) { return { data: undefined, error: false, loading: true, } } const mints0 = data.mintsAs0.map((m) => { return { type: TransactionType.MINT, hash: m.transaction.id, timestamp: m.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const mints1 = data.mintsAs1.map((m) => { return { type: TransactionType.MINT, hash: m.transaction.id, timestamp: m.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const burns0 = data.burnsAs0.map((m) => { return { type: TransactionType.BURN, hash: m.transaction.id, timestamp: m.timestamp, sender: m.owner, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const burns1 = data.burnsAs1.map((m) => { return { type: TransactionType.BURN, hash: m.transaction.id, timestamp: m.timestamp, sender: m.owner, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const swaps0 = data.swapsAs0.map((m) => { return { type: TransactionType.SWAP, hash: m.transaction.id, timestamp: m.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) const swaps1 = data.swapsAs1.map((m) => { return { type: TransactionType.SWAP, hash: m.transaction.id, timestamp: m.timestamp, sender: m.origin, token0Symbol: formatTokenSymbol(m.pool.token0.id, m.pool.token0.symbol), token1Symbol: formatTokenSymbol(m.pool.token1.id, m.pool.token1.symbol), token0Address: m.pool.token0.id, token1Address: m.pool.token1.id, amountUSD: parseFloat(m.amountUSD), amountToken0: parseFloat(m.amount0), amountToken1: parseFloat(m.amount1), } }) return { data: [...mints0, ...mints1, ...burns0, ...burns1, ...swaps0, ...swaps1], error: false, loading: false } } catch { return { data: undefined, error: true, loading: false, } } } ================================================ FILE: src/hooks/chart.ts ================================================ import { useMemo } from 'react' import { PoolChartEntry } from 'state/pools/reducer' import { TokenChartEntry } from 'state/tokens/reducer' import { ChartDayData, GenericChartEntry } from 'types' import { unixToDate } from 'utils/date' import dayjs from 'dayjs' function unixToType(unix: number, type: 'month' | 'week') { const date = dayjs.unix(unix).utc() switch (type) { case 'month': return date.format('YYYY-MM') case 'week': let week = String(date.week()) if (week.length === 1) { week = `0${week}` } return `${date.year()}-${week}` } } export function useTransformedVolumeData( chartData: ChartDayData[] | PoolChartEntry[] | TokenChartEntry[] | undefined, type: 'month' | 'week', ) { return useMemo(() => { if (chartData) { const data: Record = {} chartData.forEach(({ date, volumeUSD }: { date: number; volumeUSD: number }) => { const group = unixToType(date, type) if (data[group]) { data[group].value += volumeUSD } else { data[group] = { time: unixToDate(date), value: volumeUSD, } } }) return Object.values(data) } else { return [] } }, [chartData, type]) } ================================================ FILE: src/hooks/useAppDispatch.ts ================================================ import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux' import { AppDispatch, AppState } from 'state' export const useAppDispatch = () => useDispatch() export const useAppSelector: TypedUseSelectorHook = useSelector ================================================ FILE: src/hooks/useBlocksFromTimestamps.ts ================================================ import gql from 'graphql-tag' import { useState, useEffect, useMemo } from 'react' import { splitQuery } from 'utils/queries' import { START_BLOCKS } from 'constants/index' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' import { ApolloClient, NormalizedCacheObject } from '@apollo/client' export const GET_BLOCKS = (timestamps: string[]) => { let queryString = 'query blocks {' queryString += timestamps.map((timestamp) => { return `t${timestamp}:blocks(first: 1, orderBy: timestamp, orderDirection: desc, where: { timestamp_gt: ${timestamp}, timestamp_lt: ${ timestamp + 600 } }) { number }` }) queryString += '}' return gql(queryString) } /** * for a given array of timestamps, returns block entities * @param timestamps */ export function useBlocksFromTimestamps( timestamps: number[], blockClientOverride?: ApolloClient, ): { blocks: | { timestamp: string number: any }[] | undefined error: boolean } { const [activeNetwork] = useActiveNetworkVersion() const [blocks, setBlocks] = useState() const [error, setError] = useState(false) const { blockClient } = useClients() const activeBlockClient = blockClientOverride ?? blockClient // derive blocks based on active network const networkBlocks = blocks?.[activeNetwork.id] useEffect(() => { async function fetchData() { const results = await splitQuery(GET_BLOCKS, activeBlockClient, [], timestamps) if (results) { setBlocks({ ...(blocks ?? {}), [activeNetwork.id]: results }) } else { setError(true) } } if (!networkBlocks && !error) { fetchData() } }) const blocksFormatted = useMemo(() => { if (blocks?.[activeNetwork.id]) { const networkBlocks = blocks?.[activeNetwork.id] const formatted = [] for (const t in networkBlocks) { if (networkBlocks[t].length > 0) { const number = networkBlocks[t][0]['number'] const deploymentBlock = START_BLOCKS[activeNetwork.id] const adjustedNumber = number > deploymentBlock ? number : deploymentBlock formatted.push({ timestamp: t.split('t')[1], number: adjustedNumber, }) } } return formatted } return undefined }, [activeNetwork.id, blocks]) return { blocks: blocksFormatted, error, } } /** * @notice Fetches block objects for an array of timestamps. * @dev blocks are returned in chronological order (ASC) regardless of input. * @dev blocks are returned at string representations of Int * @dev timestamps are returns as they were provided; not the block time. * @param {Array} timestamps */ export async function getBlocksFromTimestamps( timestamps: number[], blockClient: ApolloClient, skipCount = 500, ) { if (timestamps?.length === 0) { return [] } const fetchedData: any = await splitQuery(GET_BLOCKS, blockClient, [], timestamps, skipCount) const blocks: any[] = [] if (fetchedData) { for (const t in fetchedData) { if (fetchedData[t].length > 0) { blocks.push({ timestamp: t.split('t')[1], number: fetchedData[t][0]['number'], }) } } } return blocks } ================================================ FILE: src/hooks/useCMCLink.ts ================================================ import { useState, useEffect } from 'react' // endpoint to check asset exists const cmcEndpoint = 'https://3rdparty-apis.coinmarketcap.com/v1/cryptocurrency/contract?address=' /** * Check if asset exists on CMC, if exists * return url, if not return undefined * @param address token address */ export function useCMCLink(address: string): string | undefined { const [link, setLink] = useState(undefined) useEffect(() => { async function fetchLink() { const result = await fetch(cmcEndpoint + address) // if link exists, format the url if (result.status === 200) { result.json().then(({ data }) => { setLink(data.url) }) } } if (address) { fetchLink() } }, [address]) return link } ================================================ FILE: src/hooks/useColor.ts ================================================ import { useState, useLayoutEffect, useMemo } from 'react' import { shade } from 'polished' import Vibrant from 'node-vibrant' import { hex } from 'wcag-contrast' import { Token } from '@uniswap/sdk-core' import uriToHttp from 'utils/uriToHttp' import { isAddress } from 'utils' async function getColorFromToken(token: Token): Promise { const path = `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${token.address}/logo.png` return Vibrant.from(path) .getPalette() .then((palette) => { if (palette?.Vibrant) { let detectedHex = palette.Vibrant.hex let AAscore = hex(detectedHex, '#FFF') while (AAscore < 3) { detectedHex = shade(0.005, detectedHex) AAscore = hex(detectedHex, '#FFF') } return detectedHex } return null }) .catch(() => null) } async function getColorFromUriPath(uri: string): Promise { const formattedPath = uriToHttp(uri)[0] return Vibrant.from(formattedPath) .getPalette() .then((palette) => { if (palette?.Vibrant) { return palette.Vibrant.hex } return null }) .catch(() => null) } export function useColor(address?: string) { const [color, setColor] = useState('#2172E5') const formattedAddress = isAddress(address) const token = useMemo(() => { return formattedAddress ? new Token(1, formattedAddress, 0) : undefined }, [formattedAddress]) useLayoutEffect(() => { let stale = false if (token) { getColorFromToken(token).then((tokenColor) => { if (!stale && tokenColor !== null) { setColor(tokenColor) } }) } return () => { stale = true setColor('#2172E5') } }, [token]) return color } export function useListColor(listImageUri?: string) { const [color, setColor] = useState('#2172E5') useLayoutEffect(() => { let stale = false if (listImageUri) { getColorFromUriPath(listImageUri).then((color) => { if (!stale && color !== null) { setColor(color) } }) } return () => { stale = true setColor('#2172E5') } }, [listImageUri]) return color } ================================================ FILE: src/hooks/useCopyClipboard.ts ================================================ import copy from 'copy-to-clipboard' import { useCallback, useEffect, useState } from 'react' export default function useCopyClipboard(timeout = 500): [boolean, (toCopy: string) => void] { const [isCopied, setIsCopied] = useState(false) const staticCopy = useCallback((text: string) => { const didCopy = copy(text) setIsCopied(didCopy) }, []) useEffect(() => { if (isCopied) { const hide = setTimeout(() => { setIsCopied(false) }, timeout) return () => { clearTimeout(hide) } } return undefined }, [isCopied, setIsCopied, timeout]) return [isCopied, staticCopy] } ================================================ FILE: src/hooks/useDebounce.ts ================================================ import { useEffect, useState } from 'react' // modified from https://usehooks.com/useDebounce/ export default function useDebounce(value: T, delay: number): T { const [debouncedValue, setDebouncedValue] = useState(value) useEffect(() => { // Update debounced value after delay const handler = setTimeout(() => { setDebouncedValue(value) }, delay) // Cancel the timeout if value changes (also on delay change or unmount) // This is how we prevent debounced value from updating if value is changed ... // .. within the delay period. Timeout gets cleared and restarted. return () => { clearTimeout(handler) } }, [value, delay]) return debouncedValue } ================================================ FILE: src/hooks/useEthPrices.ts ================================================ import { useBlocksFromTimestamps } from 'hooks/useBlocksFromTimestamps' import { useDeltaTimestamps } from 'utils/queries' import { useState, useEffect, useMemo } from 'react' import gql from 'graphql-tag' import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' export interface EthPrices { current: number oneDay: number twoDay: number week: number } export const ETH_PRICES = gql` query prices($block24: Int!, $block48: Int!, $blockWeek: Int!) { current: bundles(first: 1, subgraphError: allow) { ethPriceUSD } oneDay: bundles(first: 1, block: { number: $block24 }, subgraphError: allow) { ethPriceUSD } twoDay: bundles(first: 1, block: { number: $block48 }, subgraphError: allow) { ethPriceUSD } oneWeek: bundles(first: 1, block: { number: $blockWeek }, subgraphError: allow) { ethPriceUSD } } ` interface PricesResponse { current: { ethPriceUSD: string }[] oneDay: { ethPriceUSD: string }[] twoDay: { ethPriceUSD: string }[] oneWeek: { ethPriceUSD: string }[] } async function fetchEthPrices( blocks: [number, number, number], client: ApolloClient, ): Promise<{ data: EthPrices | undefined; error: boolean }> { try { const { data, error } = await client.query({ query: ETH_PRICES, variables: { block24: blocks[0], block48: blocks[1] ?? 1, blockWeek: blocks[2] ?? 1, }, }) if (error) { return { error: true, data: undefined, } } else if (data) { return { data: { current: parseFloat(data.current[0].ethPriceUSD ?? 0), oneDay: parseFloat(data.oneDay[0]?.ethPriceUSD ?? 0), twoDay: parseFloat(data.twoDay[0]?.ethPriceUSD ?? 0), week: parseFloat(data.oneWeek[0]?.ethPriceUSD ?? 0), }, error: false, } } else { return { data: undefined, error: true, } } } catch (e) { console.log(e) return { data: undefined, error: true, } } } /** * returns eth prices at current, 24h, 48h, and 1w intervals */ export function useEthPrices(): EthPrices | undefined { const [prices, setPrices] = useState<{ [network: string]: EthPrices | undefined }>() const [error, setError] = useState(false) const { dataClient } = useClients() const [t24, t48, tWeek] = useDeltaTimestamps() const { blocks, error: blockError } = useBlocksFromTimestamps([t24, t48, tWeek]) // index on active network const [activeNetwork] = useActiveNetworkVersion() const indexedPrices = prices?.[activeNetwork.id] const formattedBlocks = useMemo(() => { if (blocks) { return blocks.map((b) => parseFloat(b.number)) } return undefined }, [blocks]) useEffect(() => { async function fetch() { const { data, error } = await fetchEthPrices(formattedBlocks as [number, number, number], dataClient) if (error || blockError) { setError(true) } else if (data) { setPrices({ [activeNetwork.id]: data, }) } } if (!indexedPrices && !error && formattedBlocks) { fetch() } }, [error, prices, formattedBlocks, blockError, dataClient, indexedPrices, activeNetwork.id]) return prices?.[activeNetwork.id] } ================================================ FILE: src/hooks/useFetchListCallback.ts ================================================ import { nanoid } from '@reduxjs/toolkit' import { TokenList } from '@uniswap/token-lists' import { useCallback } from 'react' import { fetchTokenList } from '../state/lists/actions' import getTokenList from '../utils/getTokenList' import { useAppDispatch } from './useAppDispatch' export function useFetchListCallback(): (listUrl: string, sendDispatch?: boolean) => Promise { const dispatch = useAppDispatch() // note: prevent dispatch if using for list search or unsupported list return useCallback( async (listUrl: string, sendDispatch = true) => { const requestId = nanoid() sendDispatch && dispatch(fetchTokenList.pending({ requestId, url: listUrl })) return getTokenList(listUrl) .then((tokenList) => { sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList, requestId })) return tokenList }) .catch((error) => { console.debug(`Failed to get list at url ${listUrl}`, error) sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message })) throw error }) }, [dispatch], ) } ================================================ FILE: src/hooks/useHttpLocations.ts ================================================ import { useMemo } from 'react' import uriToHttp from '../utils/uriToHttp' export default function useHttpLocations(uri: string | undefined): string[] { return useMemo(() => { return uri ? uriToHttp(uri) : [] }, [uri]) } ================================================ FILE: src/hooks/useInterval.ts ================================================ import { useEffect, useRef } from 'react' export default function useInterval(callback: () => void, delay: null | number, leading = true) { const savedCallback = useRef<() => void>() // Remember the latest callback. useEffect(() => { savedCallback.current = callback }, [callback]) // Set up the interval. useEffect(() => { function tick() { const current = savedCallback.current current && current() } if (delay !== null) { if (leading) tick() const id = setInterval(tick, delay) return () => clearInterval(id) } return undefined }, [delay, leading]) } ================================================ FILE: src/hooks/useIsWindowVisible.ts ================================================ import { useCallback, useEffect, useState } from 'react' const VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document function isWindowVisible() { return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' } /** * Returns whether the window is currently visible to the user. */ export default function useIsWindowVisible(): boolean { const [focused, setFocused] = useState(isWindowVisible()) const listener = useCallback(() => { setFocused(isWindowVisible()) }, [setFocused]) useEffect(() => { if (!VISIBILITY_STATE_SUPPORTED) return undefined document.addEventListener('visibilitychange', listener) return () => { document.removeEventListener('visibilitychange', listener) } }, [listener]) return focused } ================================================ FILE: src/hooks/useLast.ts ================================================ import { useEffect, useState } from 'react' /** * Returns the last value of type T that passes a filter function * @param value changing value * @param filterFn function that determines whether a given value should be considered for the last value */ export default function useLast( value: T | undefined | null, filterFn?: (value: T | null | undefined) => boolean, ): T | null | undefined { const [last, setLast] = useState(filterFn && filterFn(value) ? value : undefined) useEffect(() => { setLast((last) => { const shouldUse: boolean = filterFn ? filterFn(value) : true if (shouldUse) return value return last }) }, [filterFn, value]) return last } function isDefined(x: T | null | undefined): x is T { return x !== null && x !== undefined } /** * Returns the last truthy value of type T * @param value changing value */ export function useLastTruthy(value: T | undefined | null): T | null | undefined { return useLast(value, isDefined) } ================================================ FILE: src/hooks/useOnClickOutside.tsx ================================================ import { RefObject, useEffect, useRef } from 'react' export function useOnClickOutside( node: RefObject, handler: undefined | (() => void), ignoredNodes: Array> = [], ) { const handlerRef = useRef void)>(handler) useEffect(() => { handlerRef.current = handler }, [handler]) useEffect(() => { const handleClickOutside = (e: MouseEvent) => { const nodeClicked = node.current?.contains(e.target as Node) const ignoredNodeClicked = ignoredNodes.reduce( (reducer, val) => reducer || !!val.current?.contains(e.target as Node), false, ) if ((nodeClicked || ignoredNodeClicked) ?? false) { return } if (handlerRef.current) handlerRef.current() } document.addEventListener('mousedown', handleClickOutside) return () => { document.removeEventListener('mousedown', handleClickOutside) } }, [node, ignoredNodes]) } ================================================ FILE: src/hooks/useParsedQueryString.ts ================================================ import { parse, ParsedQs } from 'qs' import { useMemo } from 'react' import { useLocation } from 'react-router-dom' export default function useParsedQueryString(): ParsedQs { const { search } = useLocation() return useMemo( () => (search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}), [search], ) } ================================================ FILE: src/hooks/usePrevious.ts ================================================ import { useEffect, useRef } from 'react' // modified from https://usehooks.com/usePrevious/ export default function usePrevious(value: T) { // The ref object is a generic container whose current property is mutable ... // ... and can hold any value, similar to an instance property on a class const ref = useRef() // Store current value in ref useEffect(() => { ref.current = value }, [value]) // Only re-run if value changes // Return previous value (happens before update in useEffect above) return ref.current } ================================================ FILE: src/hooks/useTheme.ts ================================================ import { ThemeContext } from 'styled-components' import { useContext } from 'react' export default function useTheme() { return useContext(ThemeContext) } ================================================ FILE: src/hooks/useToggle.ts ================================================ import { useCallback, useState } from 'react' export default function useToggle(initialState = false): [boolean, () => void] { const [state, setState] = useState(initialState) const toggle = useCallback(() => setState((state) => !state), []) return [state, toggle] } ================================================ FILE: src/hooks/useToggledVersion.ts ================================================ import useParsedQueryString from './useParsedQueryString' export enum Version { v1 = 'v1', v2 = 'v2', } export const DEFAULT_VERSION: Version = Version.v2 export default function useToggledVersion(): Version { const { use } = useParsedQueryString() if (!use || typeof use !== 'string') return Version.v2 if (use.toLowerCase() === 'v1') return Version.v1 return DEFAULT_VERSION } ================================================ FILE: src/hooks/useWindowSize.ts ================================================ import { useEffect, useState } from 'react' const isClient = typeof window === 'object' function getSize() { return { width: isClient ? window.innerWidth : undefined, height: isClient ? window.innerHeight : undefined, } } // https://usehooks.com/useWindowSize/ export function useWindowSize() { const [windowSize, setWindowSize] = useState(getSize) useEffect(() => { function handleResize() { setWindowSize(getSize()) } if (isClient) { window.addEventListener('resize', handleResize) return () => { window.removeEventListener('resize', handleResize) } } return undefined }, []) return windowSize } ================================================ FILE: src/i18n.ts ================================================ import i18next from 'i18next' import { initReactI18next } from 'react-i18next' import XHR from 'i18next-xhr-backend' import LanguageDetector from 'i18next-browser-languagedetector' i18next .use(XHR) .use(LanguageDetector) .use(initReactI18next) .init({ backend: { loadPath: `./locales/{{lng}}.json`, }, react: { useSuspense: true, }, fallbackLng: 'en', preload: ['en'], keySeparator: false, interpolation: { escapeValue: false }, }) export default i18next ================================================ FILE: src/index.tsx ================================================ import 'inter-ui' import React, { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import { Provider } from 'react-redux' import { HashRouter } from 'react-router-dom' import './i18n' import App from './pages/App' import store from './state' import UserUpdater from './state/user/updater' import ProtocolUpdater from './state/protocol/updater' import TokenUpdater from './state/tokens/updater' import PoolUpdater from './state/pools/updater' import { OriginApplication, initializeAnalytics } from '@uniswap/analytics' import ApplicationUpdater from './state/application/updater' import ListUpdater from './state/lists/updater' import ThemeProvider, { FixedGlobalStyle, ThemedGlobalStyle } from './theme' import { ApolloProvider } from '@apollo/client/react' import { client } from 'apollo/client' import { SharedEventName } from '@uniswap/analytics-events' // Actual key is set by proxy server const AMPLITUDE_DUMMY_KEY = '00000000000000000000000000000000' initializeAnalytics(AMPLITUDE_DUMMY_KEY, OriginApplication.INFO, { proxyUrl: process.env.REACT_APP_AMPLITUDE_PROXY_URL, defaultEventName: SharedEventName.PAGE_VIEWED, debug: true, }) function Updaters() { return ( <> ) } const container = document.getElementById('root') const root = createRoot(container!) root.render( , ) ================================================ FILE: src/pages/App.tsx ================================================ import React, { Suspense, useState, useEffect } from 'react' import { Route, Routes, useLocation } from 'react-router-dom' import styled from 'styled-components' import Header from '../components/Header' import URLWarning from '../components/Header/URLWarning' import Popups from '../components/Popups' import DarkModeQueryParamReader from '../theme/DarkModeQueryParamReader' import Home from './Home' import PoolsOverview from './Pool/PoolsOverview' import TokensOverview from './Token/TokensOverview' import TopBar from 'components/Header/TopBar' import { RedirectInvalidToken } from './Token/redirects' import { LocalLoader } from 'components/Loader' import PoolPage from './Pool/PoolPage' import { ExternalLink, TYPE } from 'theme' import { useActiveNetworkVersion, useSubgraphStatus } from 'state/application/hooks' import { DarkGreyCard } from 'components/Card' import { SUPPORTED_NETWORK_VERSIONS, EthereumNetworkInfo, OptimismNetworkInfo } from 'constants/networks' import { Link } from 'rebass' const AppWrapper = styled.div` display: flex; flex-flow: column; align-items: center; overflow-x: hidden; min-height: 100vh; ` const HeaderWrapper = styled.div` ${({ theme }) => theme.flexColumnNoWrap} width: 100%; position: fixed; justify-content: space-between; z-index: 2; ` const BodyWrapper = styled.div<{ $warningActive?: boolean }>` display: flex; flex-direction: column; width: 100%; padding-top: 40px; margin-top: ${({ $warningActive }) => ($warningActive ? '140px' : '100px')}; align-items: center; flex: 1; overflow-y: auto; overflow-x: hidden; z-index: 1; > * { max-width: 1200px; } @media (max-width: 1080px) { padding-top: 2rem; margin-top: 140px; } ` const Marginer = styled.div` margin-top: 5rem; ` const Hide1080 = styled.div` @media (max-width: 1080px) { display: none; } ` const BannerWrapper = styled.div` width: 100%; display: flex; justify-content: center; ` const WarningBanner = styled.div` background-color: ${({ theme }) => theme.bg3}; padding: 1rem; color: white; font-size: 14px; width: 100%; text-align: center; font-weight: 500; ` const UrlBanner = styled.div` background-color: ${({ theme }) => theme.pink1}; padding: 1rem 0.75rem; color: white; font-size: 14px; width: 100%; text-align: center; font-weight: 500; ` const Decorator = styled.span` text-decoration: underline; color: white; ` const BLOCK_DIFFERENCE_THRESHOLD = 30 export default function App() { // pretend load buffer const [loading, setLoading] = useState(true) useEffect(() => { setTimeout(() => setLoading(false), 1300) }, []) // update network based on route // TEMP - find better way to do this const location = useLocation() const [activeNetwork, setActiveNetwork] = useActiveNetworkVersion() useEffect(() => { if (location.pathname === '/') { setActiveNetwork(EthereumNetworkInfo) } else { SUPPORTED_NETWORK_VERSIONS.map((n) => { if (location.pathname.includes(n.route.toLocaleLowerCase())) { setActiveNetwork(n) } }) } }, [location.pathname, setActiveNetwork]) // subgraph health const [subgraphStatus] = useSubgraphStatus() const showNotSyncedWarning = subgraphStatus.headBlock && subgraphStatus.syncedBlock && activeNetwork === OptimismNetworkInfo ? subgraphStatus.headBlock - subgraphStatus.syncedBlock > BLOCK_DIFFERENCE_THRESHOLD : false return ( {loading ? ( ) : ( {showNotSyncedWarning && ( {`Warning: Data has only synced to block ${subgraphStatus.syncedBlock} (out of ${subgraphStatus.headBlock}). Please check back soon.`} )} {`info.uniswap.org is being deprecated on June 11th. Explore the new combined V2 and V3 analytics at `} app.uniswap.org
    {subgraphStatus.available === false ? ( The Graph hosted network which provides data for this site is temporarily experiencing issues. Check current status{' '} here. ) : ( } /> } /> } /> } /> } /> )} )} ) } ================================================ FILE: src/pages/Home/index.tsx ================================================ import React, { useState, useEffect, useMemo } from 'react' import styled from 'styled-components' import { AutoColumn } from 'components/Column' import { TYPE } from 'theme' import { ResponsiveRow, RowBetween, RowFixed } from 'components/Row' import LineChart from 'components/LineChart/alt' import useTheme from 'hooks/useTheme' import { useProtocolChartData, useProtocolData, useProtocolTransactions } from 'state/protocol/hooks' import { DarkGreyCard } from 'components/Card' import { formatDollarAmount } from 'utils/numbers' import Percent from 'components/Percent' import { HideMedium, HideSmall, StyledInternalLink } from '../../theme/components' import TokenTable from 'components/tokens/TokenTable' import PoolTable from 'components/pools/PoolTable' import { PageWrapper, ThemedBackgroundGlobal } from 'pages/styled' import { unixToDate } from 'utils/date' import BarChart from 'components/BarChart/alt' import { useAllPoolData } from 'state/pools/hooks' import { notEmpty } from 'utils' import TransactionsTable from '../../components/TransactionsTable' import { useAllTokenData } from 'state/tokens/hooks' import { MonoSpace } from 'components/shared' import { useActiveNetworkVersion } from 'state/application/hooks' import { useTransformedVolumeData } from 'hooks/chart' import { SmallOptionButton } from 'components/Button' import { VolumeWindow } from 'types' import { Trace } from '@uniswap/analytics' const ChartWrapper = styled.div` width: 49%; ${({ theme }) => theme.mediaWidth.upToSmall` width: 100%; `}; ` export default function Home() { useEffect(() => { window.scrollTo(0, 0) }, []) const theme = useTheme() const [activeNetwork] = useActiveNetworkVersion() const [protocolData] = useProtocolData() const [transactions] = useProtocolTransactions() const [volumeHover, setVolumeHover] = useState() const [liquidityHover, setLiquidityHover] = useState() const [leftLabel, setLeftLabel] = useState() const [rightLabel, setRightLabel] = useState() // Hot fix to remove errors in TVL data while subgraph syncs. const [chartData] = useProtocolChartData() useEffect(() => { setLiquidityHover(undefined) setVolumeHover(undefined) }, [activeNetwork]) // get all the pool datas that exist const allPoolData = useAllPoolData() const poolDatas = useMemo(() => { return Object.values(allPoolData) .map((p) => p.data) .filter(notEmpty) }, [allPoolData]) // if hover value undefined, reset to current day value useEffect(() => { if (volumeHover === undefined && protocolData) { setVolumeHover(protocolData.volumeUSD) } }, [protocolData, volumeHover]) useEffect(() => { if (liquidityHover === undefined && protocolData) { setLiquidityHover(protocolData.tvlUSD) } }, [liquidityHover, protocolData]) const formattedTvlData = useMemo(() => { if (chartData) { return chartData.map((day) => { return { time: unixToDate(day.date), value: day.tvlUSD, } }) } else { return [] } }, [chartData]) const formattedVolumeData = useMemo(() => { if (chartData) { return chartData.map((day) => { return { time: unixToDate(day.date), value: day.volumeUSD, } }) } else { return [] } }, [chartData]) const weeklyVolumeData = useTransformedVolumeData(chartData, 'week') const monthlyVolumeData = useTransformedVolumeData(chartData, 'month') const allTokens = useAllTokenData() const formattedTokens = useMemo(() => { return Object.values(allTokens) .map((t) => t.data) .filter(notEmpty) }, [allTokens]) const [volumeWindow, setVolumeWindow] = useState(VolumeWindow.weekly) const tvlValue = useMemo(() => { if (liquidityHover) { return formatDollarAmount(liquidityHover, 2, true) } return formatDollarAmount(protocolData?.tvlUSD, 2, true) }, [liquidityHover, protocolData?.tvlUSD]) return ( Uniswap Overview TVL {tvlValue} {leftLabel ? {leftLabel} (UTC) : null} } /> setVolumeWindow(VolumeWindow.daily)} > D setVolumeWindow(VolumeWindow.weekly)} > W setVolumeWindow(VolumeWindow.monthly)} > M } topLeft={ Volume 24H {formatDollarAmount(volumeHover, 2)} {rightLabel ? {rightLabel} (UTC) : null} } /> Volume 24H: {formatDollarAmount(protocolData?.volumeUSD)} Fees 24H: {formatDollarAmount(protocolData?.feesUSD)} TVL: {formatDollarAmount(protocolData?.tvlUSD)} Top Tokens Explore Top Pools Explore Transactions {transactions ? : null} ) } ================================================ FILE: src/pages/Pool/PoolPage.tsx ================================================ import React, { useMemo, useState, useEffect } from 'react' import styled from 'styled-components' import { useColor } from 'hooks/useColor' import { ThemedBackground, PageWrapper } from 'pages/styled' import { ExplorerDataType, feeTierPercent, getExplorerLink, isAddress } from 'utils' import { AutoColumn } from 'components/Column' import { RowBetween, RowFixed, AutoRow } from 'components/Row' import { TYPE, StyledInternalLink } from 'theme' import Loader, { LocalLoader } from 'components/Loader' import { ExternalLink, Download } from 'react-feather' import { ExternalLink as StyledExternalLink } from '../../theme/components' import useTheme from 'hooks/useTheme' import CurrencyLogo from 'components/CurrencyLogo' import { formatDollarAmount, formatAmount } from 'utils/numbers' import Percent from 'components/Percent' import { ButtonPrimary, ButtonGray, SavedIcon } from 'components/Button' import { DarkGreyCard, GreyCard, GreyBadge } from 'components/Card' import { usePoolDatas, usePoolChartData, usePoolTransactions } from 'state/pools/hooks' import { unixToDate } from 'utils/date' import { ToggleWrapper, ToggleElementFree } from 'components/Toggle/index' import BarChart from 'components/BarChart/alt' import DoubleCurrencyLogo from 'components/DoubleLogo' import TransactionTable from 'components/TransactionsTable' import { useSavedPools } from 'state/user/hooks' import DensityChart from 'components/DensityChart' import { MonoSpace } from 'components/shared' import { useActiveNetworkVersion } from 'state/application/hooks' import { networkPrefix } from 'utils/networkPrefix' import { EthereumNetworkInfo } from 'constants/networks' import { GenericImageWrapper } from 'components/Logo' import { Navigate, useParams } from 'react-router-dom' import { Trace } from '@uniswap/analytics' import { InterfacePageName } from '@uniswap/analytics-events' import { ChainId } from '@uniswap/sdk-core' const ContentLayout = styled.div` display: grid; grid-template-columns: 300px 1fr; grid-gap: 1em; @media screen and (max-width: 800px) { grid-template-columns: 1fr; grid-template-rows: 1fr 1fr; } ` const TokenButton = styled(GreyCard)` padding: 8px 12px; border-radius: 10px; :hover { cursor: pointer; opacity: 0.6; } ` const ResponsiveRow = styled(RowBetween)` ${({ theme }) => theme.mediaWidth.upToSmall` flex-direction: column; align-items: flex-start; row-gap: 24px; width: 100%: `}; ` const ToggleRow = styled(RowBetween)` @media screen and (max-width: 600px) { flex-direction: column; } ` enum ChartView { VOL, PRICE, DENSITY, FEES, } export default function PoolPageWrapper() { const { address } = useParams<{ address: string }>() if (!address || !isAddress(address)) { return } return } function PoolPage({ address }: { address: string }) { const [activeNetwork] = useActiveNetworkVersion() useEffect(() => { window.scrollTo(0, 0) }, []) // theming const backgroundColor = useColor() const theme = useTheme() // token data const poolData = usePoolDatas([address])[0] const chartData = usePoolChartData(address) const transactions = usePoolTransactions(address) const [view, setView] = useState(ChartView.VOL) const [latestValue, setLatestValue] = useState() const [valueLabel, setValueLabel] = useState() const formattedTvlData = useMemo(() => { if (chartData) { return chartData.map((day) => { return { time: unixToDate(day.date), value: day.totalValueLockedUSD, } }) } else { return [] } }, [chartData]) const formattedVolumeData = useMemo(() => { if (chartData) { return chartData.map((day) => { return { time: unixToDate(day.date), value: day.volumeUSD, } }) } else { return [] } }, [chartData]) const formattedFeesUSD = useMemo(() => { if (chartData) { return chartData.map((day) => { return { time: unixToDate(day.date), value: day.feesUSD, } }) } else { return [] } }, [chartData]) //watchlist const [savedPools, addSavedPool] = useSavedPools() return ( {poolData ? ( {`Home > `} {` Pools `} {` > `} {` ${poolData.token0.symbol} / ${poolData.token1.symbol} ${feeTierPercent( poolData.feeTier, )} `} addSavedPool(address)} /> {` ${poolData.token0.symbol} / ${poolData.token1.symbol} `} {feeTierPercent(poolData.feeTier)} {activeNetwork === EthereumNetworkInfo ? null : ( )} {`1 ${poolData.token0.symbol} = ${formatAmount(poolData.token1Price, 4)} ${ poolData.token1.symbol }`} {`1 ${poolData.token1.symbol} = ${formatAmount(poolData.token0Price, 4)} ${ poolData.token0.symbol }`} {activeNetwork !== EthereumNetworkInfo ? null : (
    Add Liquidity
    Trade
    )}
    Total Tokens Locked {poolData.token0.symbol} {formatAmount(poolData.tvlToken0)} {poolData.token1.symbol} {formatAmount(poolData.tvlToken1)} TVL {formatDollarAmount(poolData.tvlUSD)} Volume 24h {formatDollarAmount(poolData.volumeUSD)} 24h Fees {formatDollarAmount(poolData.volumeUSD * (poolData.feeTier / 1000000))} {latestValue ? formatDollarAmount(latestValue) : view === ChartView.VOL ? formatDollarAmount(formattedVolumeData[formattedVolumeData.length - 1]?.value) : view === ChartView.DENSITY ? '' : formatDollarAmount(formattedTvlData[formattedTvlData.length - 1]?.value)}{' '} {valueLabel ? {valueLabel} (UTC) : ''} (view === ChartView.VOL ? setView(ChartView.DENSITY) : setView(ChartView.VOL))} > Volume (view === ChartView.DENSITY ? setView(ChartView.VOL) : setView(ChartView.DENSITY))} > Liquidity (view === ChartView.FEES ? setView(ChartView.VOL) : setView(ChartView.FEES))} > Fees {view === ChartView.VOL ? ( ) : view === ChartView.FEES ? ( ) : ( )} Transactions {transactions ? : }
    ) : ( )}
    ) } ================================================ FILE: src/pages/Pool/PoolsOverview.tsx ================================================ import React, { useEffect, useMemo } from 'react' import { PageWrapper } from 'pages/styled' import { AutoColumn } from 'components/Column' import { TYPE } from 'theme' import PoolTable from 'components/pools/PoolTable' import { useAllPoolData, usePoolDatas } from 'state/pools/hooks' import { notEmpty } from 'utils' import { useSavedPools } from 'state/user/hooks' import { DarkGreyCard } from 'components/Card' import { Trace } from '@uniswap/analytics' // import TopPoolMovers from 'components/pools/TopPoolMovers' export default function PoolPage() { useEffect(() => { window.scrollTo(0, 0) }, []) // get all the pool datas that exist const allPoolData = useAllPoolData() const poolDatas = useMemo(() => { return Object.values(allPoolData) .map((p) => p.data) .filter(notEmpty) }, [allPoolData]) const [savedPools] = useSavedPools() const watchlistPools = usePoolDatas(savedPools) return ( Your Watchlist {watchlistPools.length > 0 ? ( ) : ( Saved pools will appear here )} All Pools ) } ================================================ FILE: src/pages/Protocol/index.tsx ================================================ import React from 'react' export default function Protocol() { return
    } ================================================ FILE: src/pages/Token/TokenPage.tsx ================================================ import React, { useMemo, useState, useEffect } from 'react' import { useTokenData, usePoolsForToken, useTokenChartData, useTokenPriceData, useTokenTransactions, } from 'state/tokens/hooks' import styled from 'styled-components' import { useColor } from 'hooks/useColor' import { ThemedBackground, PageWrapper } from 'pages/styled' import { shortenAddress, getExplorerLink, currentTimestamp, ExplorerDataType } from 'utils' import { AutoColumn } from 'components/Column' import { RowBetween, RowFixed, AutoRow, RowFlat } from 'components/Row' import { TYPE, StyledInternalLink } from 'theme' import Loader, { LocalLoader } from 'components/Loader' import { ExternalLink, Download } from 'react-feather' import { ExternalLink as StyledExternalLink } from '../../theme/components' import useTheme from 'hooks/useTheme' import CurrencyLogo from 'components/CurrencyLogo' import { formatDollarAmount } from 'utils/numbers' import Percent from 'components/Percent' import { ButtonPrimary, ButtonGray, SavedIcon } from 'components/Button' import { DarkGreyCard, LightGreyCard } from 'components/Card' import { usePoolDatas } from 'state/pools/hooks' import PoolTable from 'components/pools/PoolTable' import LineChart from 'components/LineChart/alt' import { unixToDate } from 'utils/date' import { ToggleWrapper, ToggleElementFree } from 'components/Toggle/index' import BarChart from 'components/BarChart/alt' import CandleChart from 'components/CandleChart' import TransactionTable from 'components/TransactionsTable' import { useSavedTokens } from 'state/user/hooks' import { ONE_HOUR_SECONDS, TimeWindow } from 'constants/intervals' import { MonoSpace } from 'components/shared' import dayjs from 'dayjs' import { useActiveNetworkVersion } from 'state/application/hooks' import { networkPrefix } from 'utils/networkPrefix' import { EthereumNetworkInfo } from 'constants/networks' import { GenericImageWrapper } from 'components/Logo' import { useCMCLink } from 'hooks/useCMCLink' import CMCLogo from '../../assets/images/cmc.png' import { useParams } from 'react-router-dom' import { Trace } from '@uniswap/analytics' import { ChainId } from '@uniswap/sdk-core' const PriceText = styled(TYPE.label)` font-size: 36px; line-height: 0.8; ` const ContentLayout = styled.div` margin-top: 16px; display: grid; grid-template-columns: 260px 1fr; grid-gap: 1em; @media screen and (max-width: 800px) { grid-template-columns: 1fr; grid-template-rows: 1fr 1fr; } ` const ResponsiveRow = styled(RowBetween)` ${({ theme }) => theme.mediaWidth.upToSmall` flex-direction: column; align-items: flex-start; row-gap: 24px; width: 100%: `}; ` const StyledCMCLogo = styled.img` height: 16px; display: flex; justify-content: center; align-items: center; ` enum ChartView { TVL, VOL, PRICE, } const DEFAULT_TIME_WINDOW = TimeWindow.WEEK export default function TokenPage() { const [activeNetwork] = useActiveNetworkVersion() const { address } = useParams<{ address?: string }>() const formattedAddress = address?.toLowerCase() ?? '' // theming const backgroundColor = useColor(formattedAddress) const theme = useTheme() // scroll on page view useEffect(() => { window.scrollTo(0, 0) }, []) const tokenData = useTokenData(formattedAddress) const poolsForToken = usePoolsForToken(formattedAddress) const poolDatas = usePoolDatas(poolsForToken ?? []) const transactions = useTokenTransactions(formattedAddress) const chartData = useTokenChartData(formattedAddress) // check for link to CMC const cmcLink = useCMCLink(formattedAddress) // format for chart component const formattedTvlData = useMemo(() => { if (chartData) { return chartData.map((day) => { return { time: unixToDate(day.date), value: day.totalValueLockedUSD, } }) } else { return [] } }, [chartData]) const formattedVolumeData = useMemo(() => { if (chartData) { return chartData.map((day) => { return { time: unixToDate(day.date), value: day.volumeUSD, } }) } else { return [] } }, [chartData]) // chart labels const [view, setView] = useState(ChartView.PRICE) const [latestValue, setLatestValue] = useState() const [valueLabel, setValueLabel] = useState() const [timeWindow] = useState(DEFAULT_TIME_WINDOW) // pricing data const priceData = useTokenPriceData(formattedAddress, ONE_HOUR_SECONDS, timeWindow) const adjustedToCurrent = useMemo(() => { if (priceData && tokenData && priceData.length > 0) { const adjusted = Object.assign([], priceData) adjusted.push({ time: currentTimestamp() / 1000, open: priceData[priceData.length - 1].close, close: tokenData?.priceUSD, high: tokenData?.priceUSD, low: priceData[priceData.length - 1].close, }) return adjusted } else { return undefined } }, [priceData, tokenData]) // watchlist const [savedTokens, addSavedToken] = useSavedTokens() return ( {tokenData ? ( !tokenData.exists ? ( No pool has been created with this token yet. Create one here. ) : ( {`Home > `} {` Tokens `} {` > `} {` ${tokenData.symbol} `} {` (${shortenAddress(formattedAddress)}) `} addSavedToken(formattedAddress)} /> {cmcLink && ( )} {tokenData.name} ({tokenData.symbol}) {activeNetwork === EthereumNetworkInfo ? null : ( )} {formatDollarAmount(tokenData.priceUSD)} () {activeNetwork !== EthereumNetworkInfo ? null : (
    Add Liquidity
    Trade
    )}
    TVL {formatDollarAmount(tokenData.tvlUSD)} 24h Trading Vol {formatDollarAmount(tokenData.volumeUSD)} 7d Trading Vol {formatDollarAmount(tokenData.volumeUSDWeek)} 24h Fees {formatDollarAmount(tokenData.feesUSD)} {latestValue ? formatDollarAmount(latestValue, 2) : view === ChartView.VOL ? formatDollarAmount(formattedVolumeData[formattedVolumeData.length - 1]?.value) : view === ChartView.TVL ? formatDollarAmount(formattedTvlData[formattedTvlData.length - 1]?.value) : formatDollarAmount(tokenData.priceUSD, 2)} {valueLabel ? ( {valueLabel} (UTC) ) : ( {dayjs.utc().format('MMM D, YYYY')} )} (view === ChartView.VOL ? setView(ChartView.TVL) : setView(ChartView.VOL))} > Volume (view === ChartView.TVL ? setView(ChartView.PRICE) : setView(ChartView.TVL))} > TVL setView(ChartView.PRICE)} > Price {view === ChartView.TVL ? ( ) : view === ChartView.VOL ? ( ) : view === ChartView.PRICE ? ( adjustedToCurrent ? ( ) : ( ) ) : null} Pools Transactions {transactions ? ( ) : ( )}
    ) ) : ( )}
    ) } ================================================ FILE: src/pages/Token/TokensOverview.tsx ================================================ import React, { useMemo, useEffect } from 'react' import { PageWrapper } from 'pages/styled' import { AutoColumn } from 'components/Column' import { TYPE, HideSmall } from 'theme' import TokenTable from 'components/tokens/TokenTable' import { useAllTokenData, useTokenDatas } from 'state/tokens/hooks' import { notEmpty } from 'utils' import { useSavedTokens } from 'state/user/hooks' import { DarkGreyCard } from 'components/Card' import TopTokenMovers from 'components/tokens/TopTokenMovers' import { Trace } from '@uniswap/analytics' export default function TokensOverview() { useEffect(() => { window.scrollTo(0, 0) }, []) const allTokens = useAllTokenData() const formattedTokens = useMemo(() => { return Object.values(allTokens) .map((t) => t.data) .filter(notEmpty) }, [allTokens]) const [savedTokens] = useSavedTokens() const watchListTokens = useTokenDatas(savedTokens) return ( Your Watchlist {savedTokens.length > 0 ? ( ) : ( Saved tokens will appear here )} Top Movers All Tokens ) } ================================================ FILE: src/pages/Token/redirects.tsx ================================================ import React from 'react' import TokenPage from './TokenPage' import { isAddress } from 'ethers' import { Navigate, useParams } from 'react-router-dom' export function RedirectInvalidToken() { const { address } = useParams<{ address?: string }>() if (!address || !isAddress(address)) { return } return } ================================================ FILE: src/pages/Wallets/index.tsx ================================================ import React from 'react' export default function Wallets() { return
    } ================================================ FILE: src/pages/styled.ts ================================================ import styled from 'styled-components' export const PageWrapper = styled.div` width: 90%; ` export const ThemedBackground = styled.div<{ $backgroundColor: string }>` position: absolute; top: 0; left: 0; right: 0; pointer-events: none; max-width: 100vw !important; height: 200vh; mix-blend-mode: color; background: ${({ $backgroundColor }) => `radial-gradient(50% 50% at 50% 50%, ${$backgroundColor} 0%, rgba(255, 255, 255, 0) 100%)`}; transform: translateY(-176vh); ` export const ThemedBackgroundGlobal = styled.div<{ $backgroundColor: string }>` position: absolute; top: 0; left: 0; right: 0; pointer-events: none; max-width: 100vw !important; height: 200vh; mix-blend-mode: color; background: ${({ $backgroundColor }) => `radial-gradient(50% 50% at 50% 50%, ${$backgroundColor} 0%, rgba(255, 255, 255, 0) 100%)`}; transform: translateY(-150vh); ` ================================================ FILE: src/react-app-env.d.ts ================================================ /// declare module 'jazzicon' { export default function (diameter: number, seed: number): HTMLElement } declare module 'fortmatic' interface Window { ethereum?: { // set by the Coinbase Wallet mobile dapp browser isCoinbaseWallet?: true // set by the Brave browser when using built-in wallet isBraveWallet?: true // set by the MetaMask browser extension (also set by Brave browser when using built-in wallet) isMetaMask?: true // set by the Rabby browser extension isRabby?: true // set by the Trust Wallet browser extension isTrust?: true // set by the Ledger Extension Web 3 browser extension isLedgerConnect?: true on?: (...args: any[]) => void removeListener?: (...args: any[]) => void autoRefreshOnNetworkChange?: boolean } web3?: any } declare module 'content-hash' { declare function decode(x: string): string declare function getCodec(x: string): string } declare module 'multihashes' { declare function decode(buff: Uint8Array): { code: number; name: string; length: number; digest: Uint8Array } declare function toB58String(hash: Uint8Array): string } ================================================ FILE: src/state/application/actions.ts ================================================ import { createAction } from '@reduxjs/toolkit' import { TokenList } from '@uniswap/token-lists' import { NetworkInfo } from 'constants/networks' export type PopupContent = { listUpdate: { listUrl: string oldList: TokenList newList: TokenList auto: boolean } } export enum ApplicationModal { WALLET, SETTINGS, MENU, } export const updateBlockNumber = createAction<{ chainId: number; blockNumber: number }>('application/updateBlockNumber') export const setOpenModal = createAction('application/setOpenModal') export const addPopup = createAction<{ key?: string; removeAfterMs?: number | null; content: PopupContent }>( 'application/addPopup', ) export const removePopup = createAction<{ key: string }>('application/removePopup') export const updateSubgraphStatus = createAction<{ available: boolean | null syncedBlock: number | undefined headBlock: number | undefined }>('application/updateSubgraphStatus') export const updateActiveNetworkVersion = createAction<{ activeNetworkVersion: NetworkInfo }>( 'application/updateActiveNetworkVersion', ) ================================================ FILE: src/state/application/hooks.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import { arbitrumBlockClient, arbitrumClient, blockClient, client, optimismClient, optimismBlockClient, polygonBlockClient, polygonClient, celoClient, celoBlockClient, bscClient, bscBlockClient, avalancheClient, avalancheBlockClient, baseBlockClient, baseClient, } from 'apollo/client' import { NetworkInfo, SupportedNetwork } from 'constants/networks' import { useCallback, useMemo } from 'react' import { useDispatch, useSelector } from 'react-redux' import { AppDispatch, AppState } from '../index' import { addPopup, ApplicationModal, PopupContent, removePopup, setOpenModal, updateActiveNetworkVersion, updateSubgraphStatus, } from './actions' export function useBlockNumber(): number | undefined { const [activeNetwork] = useActiveNetworkVersion() const chainId = activeNetwork.chainId return useSelector((state: AppState) => state.application.blockNumber[chainId ?? -1]) } export function useModalOpen(modal: ApplicationModal): boolean { const openModal = useSelector((state: AppState) => state.application.openModal) return openModal === modal } export function useToggleModal(modal: ApplicationModal): () => void { const open = useModalOpen(modal) const dispatch = useDispatch() return useCallback(() => dispatch(setOpenModal(open ? null : modal)), [dispatch, modal, open]) } export function useOpenModal(modal: ApplicationModal): () => void { const dispatch = useDispatch() return useCallback(() => dispatch(setOpenModal(modal)), [dispatch, modal]) } export function useCloseModals(): () => void { const dispatch = useDispatch() return useCallback(() => dispatch(setOpenModal(null)), [dispatch]) } export function useWalletModalToggle(): () => void { return useToggleModal(ApplicationModal.WALLET) } export function useToggleSettingsMenu(): () => void { return useToggleModal(ApplicationModal.SETTINGS) } // returns a function that allows adding a popup export function useAddPopup(): (content: PopupContent, key?: string) => void { const dispatch = useDispatch() return useCallback( (content: PopupContent, key?: string) => { dispatch(addPopup({ content, key })) }, [dispatch], ) } // returns a function that allows removing a popup via its key export function useRemovePopup(): (key: string) => void { const dispatch = useDispatch() return useCallback( (key: string) => { dispatch(removePopup({ key })) }, [dispatch], ) } // get the list of active popups export function useActivePopups(): AppState['application']['popupList'] { const list = useSelector((state: AppState) => state.application.popupList) return useMemo(() => list.filter((item) => item.show), [list]) } // returns a function that allows adding a popup export function useSubgraphStatus(): [ { available: boolean | null syncedBlock: number | undefined headBlock: number | undefined }, (available: boolean | null, syncedBlock: number | undefined, headBlock: number | undefined) => void, ] { const dispatch = useDispatch() const status = useSelector((state: AppState) => state.application.subgraphStatus) const update = useCallback( (available: boolean | null, syncedBlock: number | undefined, headBlock: number | undefined) => { dispatch(updateSubgraphStatus({ available, syncedBlock, headBlock })) }, [dispatch], ) return [status, update] } // returns a function that allows adding a popup export function useActiveNetworkVersion(): [NetworkInfo, (activeNetworkVersion: NetworkInfo) => void] { const dispatch = useDispatch() const activeNetwork = useSelector((state: AppState) => state.application.activeNetworkVersion) const update = useCallback( (activeNetworkVersion: NetworkInfo) => { dispatch(updateActiveNetworkVersion({ activeNetworkVersion })) }, [dispatch], ) return [activeNetwork, update] } // get the apollo client related to the active network export function useDataClient(): ApolloClient { const [activeNetwork] = useActiveNetworkVersion() switch (activeNetwork.id) { case SupportedNetwork.ETHEREUM: return client case SupportedNetwork.ARBITRUM: return arbitrumClient case SupportedNetwork.OPTIMISM: return optimismClient case SupportedNetwork.POLYGON: return polygonClient case SupportedNetwork.CELO: return celoClient case SupportedNetwork.BNB: return bscClient case SupportedNetwork.AVALANCHE: return avalancheClient case SupportedNetwork.BASE: return baseClient default: return client } } // get the apollo client related to the active network for fetching blocks export function useBlockClient(): ApolloClient { const [activeNetwork] = useActiveNetworkVersion() switch (activeNetwork.id) { case SupportedNetwork.ETHEREUM: return blockClient case SupportedNetwork.ARBITRUM: return arbitrumBlockClient case SupportedNetwork.OPTIMISM: return optimismBlockClient case SupportedNetwork.POLYGON: return polygonBlockClient case SupportedNetwork.CELO: return celoBlockClient case SupportedNetwork.BNB: return bscBlockClient case SupportedNetwork.AVALANCHE: return avalancheBlockClient case SupportedNetwork.BASE: return baseBlockClient default: return blockClient } } // Get all required subgraph clients export function useClients(): { dataClient: ApolloClient blockClient: ApolloClient } { const dataClient = useDataClient() const blockClient = useBlockClient() return { dataClient, blockClient, } } ================================================ FILE: src/state/application/reducer.ts ================================================ import { createReducer, nanoid } from '@reduxjs/toolkit' import { NetworkInfo } from 'constants/networks' import { addPopup, PopupContent, removePopup, updateBlockNumber, updateSubgraphStatus, ApplicationModal, setOpenModal, updateActiveNetworkVersion, } from './actions' import { EthereumNetworkInfo } from '../../constants/networks' type PopupList = Array<{ key: string; show: boolean; content: PopupContent; removeAfterMs: number | null }> export interface ApplicationState { readonly blockNumber: { readonly [chainId: number]: number } readonly popupList: PopupList readonly openModal: ApplicationModal | null readonly subgraphStatus: { available: boolean | null syncedBlock: number | undefined headBlock: number | undefined } readonly activeNetworkVersion: NetworkInfo } const initialState: ApplicationState = { blockNumber: {}, popupList: [], openModal: null, subgraphStatus: { available: null, syncedBlock: undefined, headBlock: undefined, }, activeNetworkVersion: EthereumNetworkInfo, } export default createReducer(initialState, (builder) => builder .addCase(updateBlockNumber, (state, action) => { const { chainId, blockNumber } = action.payload if (typeof state.blockNumber[chainId] !== 'number') { state.blockNumber[chainId] = blockNumber } else { state.blockNumber[chainId] = Math.max(blockNumber, state.blockNumber[chainId]) } }) .addCase(setOpenModal, (state, action) => { state.openModal = action.payload }) .addCase(addPopup, (state, { payload: { content, key, removeAfterMs = 15000 } }) => { state.popupList = (key ? state.popupList.filter((popup) => popup.key !== key) : state.popupList).concat([ { key: key || nanoid(), show: true, content, removeAfterMs, }, ]) }) .addCase(removePopup, (state, { payload: { key } }) => { state.popupList.forEach((p) => { if (p.key === key) { p.show = false } }) }) .addCase(updateSubgraphStatus, (state, { payload: { available, syncedBlock, headBlock } }) => { state.subgraphStatus = { available, syncedBlock, headBlock, } }) .addCase(updateActiveNetworkVersion, (state, { payload: { activeNetworkVersion } }) => { state.activeNetworkVersion = activeNetworkVersion }), ) ================================================ FILE: src/state/application/updater.ts ================================================ import { useEffect } from 'react' import { useSubgraphStatus } from './hooks' import { useFetchedSubgraphStatus } from '../../data/application' export default function Updater(): null { // subgraph status const [status, updateStatus] = useSubgraphStatus() const { available, syncedBlock: newSyncedBlock, headBlock } = useFetchedSubgraphStatus() const syncedBlock = status.syncedBlock useEffect(() => { if (status.available === null && available !== null) { updateStatus(available, syncedBlock, headBlock) } if (!status.syncedBlock || (status.syncedBlock !== newSyncedBlock && syncedBlock)) { updateStatus(status.available, newSyncedBlock, headBlock) } }, [available, headBlock, newSyncedBlock, status.available, status.syncedBlock, syncedBlock, updateStatus]) return null } ================================================ FILE: src/state/global/actions.ts ================================================ import { createAction } from '@reduxjs/toolkit' // fired once when the app reloads but before the app renders // allows any updates to be applied to store data loaded from localStorage export const updateVersion = createAction('global/updateVersion') ================================================ FILE: src/state/index.ts ================================================ import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit' import { save, load } from 'redux-localstorage-simple' import application from './application/reducer' import { updateVersion } from './global/actions' import user from './user/reducer' import lists from './lists/reducer' import protocol from './protocol/reducer' import tokens from './tokens/reducer' import pools from './pools/reducer' const PERSISTED_KEYS: string[] = ['user', 'lists'] const store = configureStore({ reducer: { application, user, lists, protocol, tokens, pools, }, middleware: [...getDefaultMiddleware({ thunk: false, immutableCheck: false }), save({ states: PERSISTED_KEYS })], preloadedState: load({ states: PERSISTED_KEYS }), }) store.dispatch(updateVersion()) export default store export type AppState = ReturnType export type AppDispatch = typeof store.dispatch ================================================ FILE: src/state/lists/actions.ts ================================================ import { ActionCreatorWithPayload, createAction } from '@reduxjs/toolkit' import { TokenList, Version } from '@uniswap/token-lists' export const fetchTokenList: Readonly<{ pending: ActionCreatorWithPayload<{ url: string; requestId: string }> fulfilled: ActionCreatorWithPayload<{ url: string; tokenList: TokenList; requestId: string }> rejected: ActionCreatorWithPayload<{ url: string; errorMessage: string; requestId: string }> }> = { pending: createAction('lists/fetchTokenList/pending'), fulfilled: createAction('lists/fetchTokenList/fulfilled'), rejected: createAction('lists/fetchTokenList/rejected'), } // add and remove from list options export const addList = createAction('lists/addList') export const removeList = createAction('lists/removeList') // select which lists to search across from loaded lists export const enableList = createAction('lists/enableList') export const disableList = createAction('lists/disableList') // versioning export const acceptListUpdate = createAction('lists/acceptListUpdate') export const rejectVersionUpdate = createAction('lists/rejectVersionUpdate') ================================================ FILE: src/state/lists/hooks.ts ================================================ import { UNSUPPORTED_LIST_URLS } from './../../constants/lists' import DEFAULT_TOKEN_LIST from '@uniswap/default-token-list' import { Tags, TokenList } from '@uniswap/token-lists' import { useMemo } from 'react' import { useSelector } from 'react-redux' import { AppState } from '../index' import sortByListPriority from 'utils/listSort' import UNSUPPORTED_TOKEN_LIST from '../../constants/tokenLists/uniswap-v2-unsupported.tokenlist.json' // import { useFetchListCallback } from 'hooks/useFetchListCallback' import { WrappedTokenInfo } from './wrappedTokenInfo' type TagDetails = Tags[keyof Tags] export interface TagInfo extends TagDetails { id: string } export type TokenAddressMap = Readonly<{ [chainId: number]: Readonly<{ [tokenAddress: string]: { token: WrappedTokenInfo; list: TokenList } }> }> type Mutable = { -readonly [P in keyof T]: Mutable } const listCache: WeakMap | null = typeof WeakMap !== 'undefined' ? new WeakMap() : null function listToTokenMap(list: TokenList): TokenAddressMap { const result = listCache?.get(list) if (result) return result const map = list.tokens.reduce>((tokenMap, tokenInfo) => { const token = new WrappedTokenInfo(tokenInfo, list) if (tokenMap[token.chainId]?.[token.address] !== undefined) { return tokenMap } if (!tokenMap[token.chainId]) tokenMap[token.chainId] = {} tokenMap[token.chainId][token.address] = { token, list, } return tokenMap }, {}) as TokenAddressMap listCache?.set(list, map) return map } const TRANSFORMED_DEFAULT_TOKEN_LIST = listToTokenMap(DEFAULT_TOKEN_LIST) export function useAllLists(): { readonly [url: string]: { readonly current: TokenList | null readonly pendingUpdate: TokenList | null readonly loadingRequestId: string | null readonly error: string | null } } { return useSelector((state) => state.lists.byUrl) } /** * Combine the tokens in map2 with the tokens on map1, where tokens on map1 take precedence * @param map1 the base token map * @param map2 the map of additioanl tokens to add to the base map */ export function combineMaps(map1: TokenAddressMap, map2: TokenAddressMap): TokenAddressMap { const chainIds = Object.keys( Object.keys(map1) .concat(Object.keys(map2)) .reduce<{ [chainId: string]: true }>((memo, value) => { memo[value] = true return memo }, {}), ).map((id) => parseInt(id)) return chainIds.reduce>((memo, chainId) => { memo[chainId] = { ...map2[chainId], // map1 takes precedence ...map1[chainId], } return memo }, {}) as TokenAddressMap } // merge tokens contained within lists from urls function useCombinedTokenMapFromUrls(urls: string[] | undefined): TokenAddressMap { const lists = useAllLists() return useMemo(() => { if (!urls) return {} return ( urls .slice() // sort by priority so top priority goes last .sort(sortByListPriority) .reduce((allTokens, currentUrl) => { const current = lists[currentUrl]?.current if (!current) return allTokens try { return combineMaps(allTokens, listToTokenMap(current)) } catch (error) { console.error('Could not show token list due to error', error) return allTokens } }, {}) ) }, [lists, urls]) } // filter out unsupported lists export function useActiveListUrls(): string[] | undefined { return useSelector((state) => state.lists.activeListUrls)?.filter( (url) => !UNSUPPORTED_LIST_URLS.includes(url), ) } export function useInactiveListUrls(): string[] { const lists = useAllLists() const allActiveListUrls = useActiveListUrls() return Object.keys(lists).filter((url) => !allActiveListUrls?.includes(url) && !UNSUPPORTED_LIST_URLS.includes(url)) } // get all the tokens from active lists, combine with local default tokens export function useCombinedActiveList(): TokenAddressMap { const activeListUrls = useActiveListUrls() const activeTokens = useCombinedTokenMapFromUrls(activeListUrls) return combineMaps(activeTokens, TRANSFORMED_DEFAULT_TOKEN_LIST) } // all tokens from inactive lists export function useCombinedInactiveList(): TokenAddressMap { const allInactiveListUrls: string[] = useInactiveListUrls() return useCombinedTokenMapFromUrls(allInactiveListUrls) } // list of tokens not supported on interface, used to show warnings and prevent swaps and adds export function useUnsupportedTokenList(): TokenAddressMap { // get hard coded unsupported tokens const localUnsupportedListMap = listToTokenMap(UNSUPPORTED_TOKEN_LIST) // get any loaded unsupported tokens const loadedUnsupportedListMap = useCombinedTokenMapFromUrls(UNSUPPORTED_LIST_URLS) // format into one token address map return combineMaps(localUnsupportedListMap, loadedUnsupportedListMap) } export function useIsListActive(url: string): boolean { const activeListUrls = useActiveListUrls() return Boolean(activeListUrls?.includes(url)) } ================================================ FILE: src/state/lists/reducer.test.ts ================================================ import { DEFAULT_ACTIVE_LIST_URLS } from './../../constants/lists' import { createStore, Store } from 'redux' import { DEFAULT_LIST_OF_LISTS } from '../../constants/lists' import { updateVersion } from '../global/actions' import { fetchTokenList, acceptListUpdate, addList, removeList, enableList } from './actions' import reducer, { ListsState } from './reducer' const STUB_TOKEN_LIST = { name: '', timestamp: '', version: { major: 1, minor: 1, patch: 1 }, tokens: [], } const PATCHED_STUB_LIST = { ...STUB_TOKEN_LIST, version: { ...STUB_TOKEN_LIST.version, patch: STUB_TOKEN_LIST.version.patch + 1 }, } const MINOR_UPDATED_STUB_LIST = { ...STUB_TOKEN_LIST, version: { ...STUB_TOKEN_LIST.version, minor: STUB_TOKEN_LIST.version.minor + 1 }, } const MAJOR_UPDATED_STUB_LIST = { ...STUB_TOKEN_LIST, version: { ...STUB_TOKEN_LIST.version, major: STUB_TOKEN_LIST.version.major + 1 }, } describe('list reducer', () => { let store: Store beforeEach(() => { store = createStore(reducer, { byUrl: {}, activeListUrls: undefined, }) }) describe('fetchTokenList', () => { describe('pending', () => { it('sets pending', () => { store.dispatch(fetchTokenList.pending({ requestId: 'request-id', url: 'fake-url' })) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, loadingRequestId: 'request-id', current: null, pendingUpdate: null, }, }, selectedListUrl: undefined, }) }) it('does not clear current list', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, pendingUpdate: null, loadingRequestId: null, }, }, activeListUrls: undefined, }) store.dispatch(fetchTokenList.pending({ requestId: 'request-id', url: 'fake-url' })) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: 'request-id', pendingUpdate: null, }, }, activeListUrls: undefined, }) }) }) describe('fulfilled', () => { it('saves the list', () => { store.dispatch( fetchTokenList.fulfilled({ tokenList: STUB_TOKEN_LIST, requestId: 'request-id', url: 'fake-url' }), ) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) }) it('does not save the list in pending if current is same', () => { store.dispatch( fetchTokenList.fulfilled({ tokenList: STUB_TOKEN_LIST, requestId: 'request-id', url: 'fake-url' }), ) store.dispatch( fetchTokenList.fulfilled({ tokenList: STUB_TOKEN_LIST, requestId: 'request-id', url: 'fake-url' }), ) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) }) it('does not save to current if list is newer patch version', () => { store.dispatch( fetchTokenList.fulfilled({ tokenList: STUB_TOKEN_LIST, requestId: 'request-id', url: 'fake-url' }), ) store.dispatch( fetchTokenList.fulfilled({ tokenList: PATCHED_STUB_LIST, requestId: 'request-id', url: 'fake-url' }), ) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, }, activeListUrls: undefined, }) }) it('does not save to current if list is newer minor version', () => { store.dispatch( fetchTokenList.fulfilled({ tokenList: STUB_TOKEN_LIST, requestId: 'request-id', url: 'fake-url' }), ) store.dispatch( fetchTokenList.fulfilled({ tokenList: MINOR_UPDATED_STUB_LIST, requestId: 'request-id', url: 'fake-url' }), ) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: MINOR_UPDATED_STUB_LIST, }, }, activeListUrls: undefined, }) }) it('does not save to pending if list is newer major version', () => { store.dispatch( fetchTokenList.fulfilled({ tokenList: STUB_TOKEN_LIST, requestId: 'request-id', url: 'fake-url' }), ) store.dispatch( fetchTokenList.fulfilled({ tokenList: MAJOR_UPDATED_STUB_LIST, requestId: 'request-id', url: 'fake-url' }), ) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: MAJOR_UPDATED_STUB_LIST, }, }, activeListUrls: undefined, }) }) }) describe('rejected', () => { it('no-op if not loading', () => { store.dispatch(fetchTokenList.rejected({ requestId: 'request-id', errorMessage: 'abcd', url: 'fake-url' })) expect(store.getState()).toEqual({ byUrl: {}, activeListUrls: undefined, }) }) it('sets the error if loading', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: null, loadingRequestId: 'request-id', pendingUpdate: null, }, }, activeListUrls: undefined, }) store.dispatch(fetchTokenList.rejected({ requestId: 'request-id', errorMessage: 'abcd', url: 'fake-url' })) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: 'abcd', current: null, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) }) }) }) describe('addList', () => { it('adds the list key to byUrl', () => { store.dispatch(addList('list-id')) expect(store.getState()).toEqual({ byUrl: { 'list-id': { error: null, current: null, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) }) it('no op for existing list', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) store.dispatch(addList('fake-url')) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) }) }) describe('acceptListUpdate', () => { it('swaps pending update into current', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, }, activeListUrls: undefined, }) store.dispatch(acceptListUpdate('fake-url')) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: PATCHED_STUB_LIST, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) }) }) describe('removeList', () => { it('deletes the list key', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, }, activeListUrls: undefined, }) store.dispatch(removeList('fake-url')) expect(store.getState()).toEqual({ byUrl: {}, activeListUrls: undefined, }) }) it('Removes from active lists if active list is removed', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, }, activeListUrls: ['fake-url'], }) store.dispatch(removeList('fake-url')) expect(store.getState()).toEqual({ byUrl: {}, activeListUrls: [], }) }) }) describe('enableList', () => { it('enables a list url', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, }, activeListUrls: undefined, }) store.dispatch(enableList('fake-url')) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, }, activeListUrls: ['fake-url'], }) }) it('adds to url keys if not present already on enable', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, }, activeListUrls: undefined, }) store.dispatch(enableList('fake-url-invalid')) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: PATCHED_STUB_LIST, }, 'fake-url-invalid': { error: null, current: null, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: ['fake-url-invalid'], }) }) it('enable works if list already added', () => { store = createStore(reducer, { byUrl: { 'fake-url': { error: null, current: null, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) store.dispatch(enableList('fake-url')) expect(store.getState()).toEqual({ byUrl: { 'fake-url': { error: null, current: null, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: ['fake-url'], }) }) }) describe('updateVersion', () => { describe('never initialized', () => { beforeEach(() => { store = createStore(reducer, { byUrl: { 'https://unpkg.com/@uniswap/default-token-list@latest/uniswap-default.tokenlist.json': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, 'https://unpkg.com/@uniswap/default-token-list@latest': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, }) store.dispatch(updateVersion()) }) it('clears the current lists', () => { expect( store.getState().byUrl['https://unpkg.com/@uniswap/default-token-list@latest/uniswap-default.tokenlist.json'], ).toBeUndefined() expect(store.getState().byUrl['https://unpkg.com/@uniswap/default-token-list@latest']).toBeUndefined() }) it('puts in all the new lists', () => { expect(Object.keys(store.getState().byUrl)).toEqual(DEFAULT_LIST_OF_LISTS) }) it('all lists are empty', () => { const s = store.getState() Object.keys(s.byUrl).forEach((url) => { expect(s.byUrl[url]).toEqual({ error: null, current: null, loadingRequestId: null, pendingUpdate: null, }) }) }) it('sets initialized lists', () => { expect(store.getState().lastInitializedDefaultListOfLists).toEqual(DEFAULT_LIST_OF_LISTS) }) it('sets selected list', () => { expect(store.getState().activeListUrls).toEqual(DEFAULT_ACTIVE_LIST_URLS) }) }) describe('initialized with a different set of lists', () => { beforeEach(() => { store = createStore(reducer, { byUrl: { 'https://unpkg.com/@uniswap/default-token-list@latest/uniswap-default.tokenlist.json': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, 'https://unpkg.com/@uniswap/default-token-list@latest': { error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }, }, activeListUrls: undefined, lastInitializedDefaultListOfLists: ['https://unpkg.com/@uniswap/default-token-list@latest'], }) store.dispatch(updateVersion()) }) it('does not remove lists not in last initialized list of lists', () => { expect( store.getState().byUrl['https://unpkg.com/@uniswap/default-token-list@latest/uniswap-default.tokenlist.json'], ).toEqual({ error: null, current: STUB_TOKEN_LIST, loadingRequestId: null, pendingUpdate: null, }) }) it('removes lists in the last initialized list of lists', () => { expect(store.getState().byUrl['https://unpkg.com/@uniswap/default-token-list@latest']).toBeUndefined() }) it('each of those initialized lists is empty', () => { const byUrl = store.getState().byUrl // note we don't expect the uniswap default list to be prepopulated // this is ok. Object.keys(byUrl).forEach((url) => { if (url !== 'https://unpkg.com/@uniswap/default-token-list@latest/uniswap-default.tokenlist.json') { expect(byUrl[url]).toEqual({ error: null, current: null, loadingRequestId: null, pendingUpdate: null, }) } }) }) it('sets initialized lists', () => { expect(store.getState().lastInitializedDefaultListOfLists).toEqual(DEFAULT_LIST_OF_LISTS) }) it('sets default list to selected list', () => { expect(store.getState().activeListUrls).toEqual(DEFAULT_ACTIVE_LIST_URLS) }) }) }) }) ================================================ FILE: src/state/lists/reducer.ts ================================================ import { DEFAULT_ACTIVE_LIST_URLS, UNSUPPORTED_LIST_URLS } from './../../constants/lists' import { createReducer } from '@reduxjs/toolkit' import { getVersionUpgrade, VersionUpgrade } from '@uniswap/token-lists' import { TokenList } from '@uniswap/token-lists/dist/types' import { DEFAULT_LIST_OF_LISTS } from '../../constants/lists' import { updateVersion } from '../global/actions' import { acceptListUpdate, addList, fetchTokenList, removeList, enableList, disableList } from './actions' export interface ListsState { readonly byUrl: { readonly [url: string]: { readonly current: TokenList | null readonly pendingUpdate: TokenList | null readonly loadingRequestId: string | null readonly error: string | null } } // this contains the default list of lists from the last time the updateVersion was called, i.e. the app was reloaded readonly lastInitializedDefaultListOfLists?: string[] // currently active lists readonly activeListUrls: string[] | undefined } type ListState = ListsState['byUrl'][string] const NEW_LIST_STATE: ListState = { error: null, current: null, loadingRequestId: null, pendingUpdate: null, } type Mutable = { -readonly [P in keyof T]: T[P] extends ReadonlyArray ? U[] : T[P] } const initialState: ListsState = { lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS, byUrl: { ...DEFAULT_LIST_OF_LISTS.concat(UNSUPPORTED_LIST_URLS).reduce>((memo, listUrl) => { memo[listUrl] = NEW_LIST_STATE return memo }, {}), }, activeListUrls: DEFAULT_ACTIVE_LIST_URLS, } export default createReducer(initialState, (builder) => builder .addCase(fetchTokenList.pending, (state, { payload: { requestId, url } }) => { const current = state.byUrl[url]?.current ?? null const pendingUpdate = state.byUrl[url]?.pendingUpdate ?? null state.byUrl[url] = { current, pendingUpdate, loadingRequestId: requestId, error: null, } }) .addCase(fetchTokenList.fulfilled, (state, { payload: { requestId, tokenList, url } }) => { const current = state.byUrl[url]?.current const loadingRequestId = state.byUrl[url]?.loadingRequestId // no-op if update does nothing if (current) { const upgradeType = getVersionUpgrade(current.version, tokenList.version) if (upgradeType === VersionUpgrade.NONE) return if (loadingRequestId === null || loadingRequestId === requestId) { state.byUrl[url] = { ...state.byUrl[url], loadingRequestId: null, error: null, current: current, pendingUpdate: tokenList, } } } else { // activate if on default active if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) { state.activeListUrls?.push(url) } state.byUrl[url] = { ...state.byUrl[url], loadingRequestId: null, error: null, current: tokenList, pendingUpdate: null, } } }) .addCase(fetchTokenList.rejected, (state, { payload: { url, requestId, errorMessage } }) => { if (state.byUrl[url]?.loadingRequestId !== requestId) { // no-op since it's not the latest request return } state.byUrl[url] = { ...state.byUrl[url], loadingRequestId: null, error: errorMessage, current: null, pendingUpdate: null, } }) .addCase(addList, (state, { payload: url }) => { if (!state.byUrl[url]) { state.byUrl[url] = NEW_LIST_STATE } }) .addCase(removeList, (state, { payload: url }) => { if (state.byUrl[url]) { delete state.byUrl[url] } // remove list from active urls if needed if (state.activeListUrls && state.activeListUrls.includes(url)) { state.activeListUrls = state.activeListUrls.filter((u) => u !== url) } }) .addCase(enableList, (state, { payload: url }) => { if (!state.byUrl[url]) { state.byUrl[url] = NEW_LIST_STATE } if (state.activeListUrls && !state.activeListUrls.includes(url)) { state.activeListUrls.push(url) } if (!state.activeListUrls) { state.activeListUrls = [url] } }) .addCase(disableList, (state, { payload: url }) => { if (state.activeListUrls && state.activeListUrls.includes(url)) { state.activeListUrls = state.activeListUrls.filter((u) => u !== url) } }) .addCase(acceptListUpdate, (state, { payload: url }) => { if (!state.byUrl[url]?.pendingUpdate) { throw new Error('accept list update called without pending update') } state.byUrl[url] = { ...state.byUrl[url], pendingUpdate: null, current: state.byUrl[url].pendingUpdate, } }) .addCase(updateVersion, (state) => { // state loaded from localStorage, but new lists have never been initialized if (!state.lastInitializedDefaultListOfLists) { state.byUrl = initialState.byUrl state.activeListUrls = initialState.activeListUrls } else if (state.lastInitializedDefaultListOfLists) { const lastInitializedSet = state.lastInitializedDefaultListOfLists.reduce>( (s, l) => s.add(l), new Set(), ) const newListOfListsSet = DEFAULT_LIST_OF_LISTS.reduce>((s, l) => s.add(l), new Set()) DEFAULT_LIST_OF_LISTS.forEach((listUrl) => { if (!lastInitializedSet.has(listUrl)) { state.byUrl[listUrl] = NEW_LIST_STATE } }) state.lastInitializedDefaultListOfLists.forEach((listUrl) => { if (!newListOfListsSet.has(listUrl)) { delete state.byUrl[listUrl] } }) } state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS // if no active lists, activate defaults if (!state.activeListUrls) { state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS // for each list on default list, initialize if needed DEFAULT_ACTIVE_LIST_URLS.map((listUrl: string) => { if (!state.byUrl[listUrl]) { state.byUrl[listUrl] = NEW_LIST_STATE } return true }) } }), ) ================================================ FILE: src/state/lists/updater.ts ================================================ import { getVersionUpgrade, minVersionBump, VersionUpgrade } from '@uniswap/token-lists' import { OPTIMISM_LIST, UNSUPPORTED_LIST_URLS } from 'constants/lists' import { useCallback, useEffect } from 'react' import { useAllLists } from 'state/lists/hooks' import { useFetchListCallback } from '../../hooks/useFetchListCallback' import useInterval from '../../hooks/useInterval' import useIsWindowVisible from '../../hooks/useIsWindowVisible' import { acceptListUpdate, enableList } from './actions' import { useActiveListUrls } from './hooks' import { useAppDispatch } from 'hooks/useAppDispatch' export default function Updater(): null { const dispatch = useAppDispatch() const isWindowVisible = useIsWindowVisible() // get all loaded lists, and the active urls const lists = useAllLists() const activeListUrls = useActiveListUrls() const fetchList = useFetchListCallback() const fetchAllListsCallback = useCallback(() => { if (!isWindowVisible) return Object.keys(lists).forEach((url) => fetchList(url).catch((error) => console.debug('interval list fetching error', error)), ) }, [fetchList, isWindowVisible, lists]) dispatch(enableList(OPTIMISM_LIST)) // fetch all lists every 10 minutes, but only after we initialize library useInterval(fetchAllListsCallback, 1000 * 60 * 10) // whenever a list is not loaded and not loading, try again to load it useEffect(() => { Object.keys(lists).forEach((listUrl) => { const list = lists[listUrl] if (!list.current && !list.loadingRequestId && !list.error) { fetchList(listUrl).catch((error) => console.debug('list added fetching error', error)) } }) }, [dispatch, fetchList, lists]) // if any lists from unsupported lists are loaded, check them too (in case new updates since last visit) useEffect(() => { UNSUPPORTED_LIST_URLS.forEach((listUrl) => { const list = lists[listUrl] if (!list || (!list.current && !list.loadingRequestId && !list.error)) { fetchList(listUrl).catch((error) => console.debug('list added fetching error', error)) } }) }, [dispatch, fetchList, lists]) // automatically update lists if versions are minor/patch useEffect(() => { Object.keys(lists).forEach((listUrl) => { const list = lists[listUrl] if (list.current && list.pendingUpdate) { const bump = getVersionUpgrade(list.current.version, list.pendingUpdate.version) switch (bump) { case VersionUpgrade.NONE: throw new Error('unexpected no version bump') case VersionUpgrade.PATCH: case VersionUpgrade.MINOR: const min = minVersionBump(list.current.tokens, list.pendingUpdate.tokens) // automatically update minor/patch as long as bump matches the min update if (bump >= min) { dispatch(acceptListUpdate(listUrl)) } else { console.error( `List at url ${listUrl} could not automatically update because the version bump was only PATCH/MINOR while the update had breaking changes and should have been MAJOR`, ) } break // update any active or inactive lists case VersionUpgrade.MAJOR: dispatch(acceptListUpdate(listUrl)) } } }) }, [dispatch, lists, activeListUrls]) return null } ================================================ FILE: src/state/lists/wrappedTokenInfo.ts ================================================ import { Currency, Token } from '@uniswap/sdk-core' import { Tags, TokenInfo, TokenList } from '@uniswap/token-lists' import { isAddress } from '../../utils' type TagDetails = Tags[keyof Tags] interface TagInfo extends TagDetails { id: string } /** * Token instances created from token info on a token list. */ export class WrappedTokenInfo implements Token { public readonly isNative = false public readonly isToken = true public readonly list: TokenList public readonly tokenInfo: TokenInfo constructor(tokenInfo: TokenInfo, list: TokenList) { this.tokenInfo = tokenInfo this.list = list } private _checksummedAddress: string | null = null public get address(): string { if (this._checksummedAddress) return this._checksummedAddress const checksummedAddress = isAddress(this.tokenInfo.address) if (!checksummedAddress) throw new Error(`Invalid token address: ${this.tokenInfo.address}`) return (this._checksummedAddress = checksummedAddress) } public get chainId(): number { return this.tokenInfo.chainId } public get decimals(): number { return this.tokenInfo.decimals } public get name(): string { return this.tokenInfo.name } public get symbol(): string { return this.tokenInfo.symbol } public get logoURI(): string | undefined { return this.tokenInfo.logoURI } private _tags: TagInfo[] | null = null public get tags(): TagInfo[] { if (this._tags !== null) return this._tags if (!this.tokenInfo.tags) return (this._tags = []) const listTags = this.list.tags if (!listTags) return (this._tags = []) return (this._tags = this.tokenInfo.tags.map((tagId) => { return { ...listTags[tagId], id: tagId, } })) } equals(other: Currency): boolean { return other.chainId === this.chainId && other.isToken && other.address.toLowerCase() === this.address.toLowerCase() } sortsBefore(other: Token): boolean { if (this.equals(other)) throw new Error('Addresses should not be equal') return this.address.toLowerCase() < other.address.toLowerCase() } public get wrapped(): Token { return this } } ================================================ FILE: src/state/pools/actions.ts ================================================ import { TickProcessed } from './../../data/pools/tickData' import { createAction } from '@reduxjs/toolkit' import { PoolData, PoolChartEntry } from './reducer' import { Transaction } from 'types' import { SupportedNetwork } from 'constants/networks' // protocol wide info export const updatePoolData = createAction<{ pools: PoolData[]; networkId: SupportedNetwork }>('pools/updatePoolData') // add pool address to byAddress export const addPoolKeys = createAction<{ poolAddresses: string[]; networkId: SupportedNetwork }>('pool/addPoolKeys') export const updatePoolChartData = createAction<{ poolAddress: string chartData: PoolChartEntry[] networkId: SupportedNetwork }>('pool/updatePoolChartData') export const updatePoolTransactions = createAction<{ poolAddress: string transactions: Transaction[] networkId: SupportedNetwork }>('pool/updatePoolTransactions') export const updateTickData = createAction<{ poolAddress: string tickData: | { ticksProcessed: TickProcessed[] feeTier: string tickSpacing: number activeTickIdx: number } | undefined networkId: SupportedNetwork }>('pool/updateTickData') ================================================ FILE: src/state/pools/hooks.ts ================================================ import { addPoolKeys, updatePoolChartData, updatePoolTransactions, updateTickData } from 'state/pools/actions' import { AppState, AppDispatch } from './../index' import { useCallback, useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { PoolData, PoolChartEntry } from './reducer' import { updatePoolData } from './actions' import { notEmpty } from 'utils' import { fetchPoolChartData } from 'data/pools/chartData' import { Transaction } from 'types' import { fetchPoolTransactions } from 'data/pools/transactions' import { PoolTickData } from 'data/pools/tickData' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' export function useAllPoolData(): { [address: string]: { data: PoolData | undefined; lastUpdated: number | undefined } } { const [network] = useActiveNetworkVersion() return useSelector((state: AppState) => state.pools.byAddress[network.id] ?? {}) } export function useUpdatePoolData(): (pools: PoolData[]) => void { const dispatch = useDispatch() const [network] = useActiveNetworkVersion() return useCallback( (pools: PoolData[]) => dispatch(updatePoolData({ pools, networkId: network.id })), [dispatch, network.id], ) } export function useAddPoolKeys(): (addresses: string[]) => void { const dispatch = useDispatch() const [network] = useActiveNetworkVersion() return useCallback( (poolAddresses: string[]) => dispatch(addPoolKeys({ poolAddresses, networkId: network.id })), [dispatch, network.id], ) } export function usePoolDatas(poolAddresses: string[]): PoolData[] { const allPoolData = useAllPoolData() const addPoolKeys = useAddPoolKeys() const untrackedAddresses = poolAddresses.reduce((accum: string[], address) => { if (!Object.keys(allPoolData).includes(address)) { accum.push(address) } return accum }, []) useEffect(() => { if (untrackedAddresses) { addPoolKeys(untrackedAddresses) } return }, [addPoolKeys, untrackedAddresses]) // filter for pools with data const poolsWithData = poolAddresses .map((address) => { const poolData = allPoolData[address]?.data return poolData ?? undefined }) .filter(notEmpty) return poolsWithData } /** * Get top pools addresses that token is included in * If not loaded, fetch and store * @param address */ export function usePoolChartData(address: string): PoolChartEntry[] | undefined { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() const pool = useSelector((state: AppState) => state.pools.byAddress[activeNetwork.id]?.[address]) const chartData = pool?.chartData const [error, setError] = useState(false) const { dataClient } = useClients() useEffect(() => { async function fetch() { const { error, data } = await fetchPoolChartData(address, dataClient) if (!error && data) { dispatch(updatePoolChartData({ poolAddress: address, chartData: data, networkId: activeNetwork.id })) } if (error) { setError(error) } } if (!chartData && !error) { fetch() } }, [address, dispatch, error, chartData, dataClient, activeNetwork.id]) // return data return chartData } /** * Get all transactions on pool * @param address */ export function usePoolTransactions(address: string): Transaction[] | undefined { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() const pool = useSelector((state: AppState) => state.pools.byAddress[activeNetwork.id]?.[address]) const transactions = pool?.transactions const [error, setError] = useState(false) const { dataClient } = useClients() useEffect(() => { async function fetch() { const { error, data } = await fetchPoolTransactions(address, dataClient) if (error) { setError(true) } else if (data) { dispatch(updatePoolTransactions({ poolAddress: address, transactions: data, networkId: activeNetwork.id })) } } if (!transactions && !error) { fetch() } }, [address, dispatch, error, transactions, dataClient, activeNetwork.id]) // return data return transactions } export function usePoolTickData( address: string, ): [PoolTickData | undefined, (poolAddress: string, tickData: PoolTickData) => void] { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() const pool = useSelector((state: AppState) => state.pools.byAddress[activeNetwork.id]?.[address]) const tickData = pool.tickData const setPoolTickData = useCallback( (address: string, tickData: PoolTickData) => dispatch(updateTickData({ poolAddress: address, tickData, networkId: activeNetwork.id })), [activeNetwork.id, dispatch], ) return [tickData, setPoolTickData] } ================================================ FILE: src/state/pools/reducer.ts ================================================ import { currentTimestamp } from './../../utils/index' import { updatePoolData, addPoolKeys, updatePoolChartData, updatePoolTransactions, updateTickData } from './actions' import { createReducer } from '@reduxjs/toolkit' import { SerializedToken } from 'state/user/actions' import { Transaction } from 'types' import { PoolTickData } from 'data/pools/tickData' import { SupportedNetwork } from 'constants/networks' export interface Pool { address: string token0: SerializedToken token1: SerializedToken } export interface PoolData { // basic token info address: string feeTier: number token0: { name: string symbol: string address: string decimals: number derivedETH: number } token1: { name: string symbol: string address: string decimals: number derivedETH: number } // for tick math liquidity: number sqrtPrice: number tick: number // volume volumeUSD: number volumeUSDChange: number volumeUSDWeek: number // liquidity tvlUSD: number tvlUSDChange: number // prices token0Price: number token1Price: number // token amounts tvlToken0: number tvlToken1: number } export type PoolChartEntry = { date: number volumeUSD: number totalValueLockedUSD: number feesUSD: number } export interface PoolsState { // analytics data from byAddress: { [networkId: string]: { [address: string]: { data: PoolData | undefined chartData: PoolChartEntry[] | undefined transactions: Transaction[] | undefined lastUpdated: number | undefined tickData: PoolTickData | undefined } } } } export const initialState: PoolsState = { byAddress: { [SupportedNetwork.ETHEREUM]: {}, [SupportedNetwork.ARBITRUM]: {}, [SupportedNetwork.OPTIMISM]: {}, [SupportedNetwork.POLYGON]: {}, [SupportedNetwork.CELO]: {}, [SupportedNetwork.BNB]: {}, [SupportedNetwork.AVALANCHE]: {}, [SupportedNetwork.BASE]: {}, }, } export default createReducer(initialState, (builder) => builder .addCase(updatePoolData, (state, { payload: { pools, networkId } }) => { pools.map( (poolData) => (state.byAddress[networkId][poolData.address] = { ...state.byAddress[networkId][poolData.address], data: poolData, lastUpdated: currentTimestamp(), }), ) }) // add address to byAddress keys if not included yet .addCase(addPoolKeys, (state, { payload: { poolAddresses, networkId } }) => { poolAddresses.map((address) => { if (!state.byAddress[networkId][address]) { state.byAddress[networkId][address] = { data: undefined, chartData: undefined, transactions: undefined, lastUpdated: undefined, tickData: undefined, } } }) }) .addCase(updatePoolChartData, (state, { payload: { poolAddress, chartData, networkId } }) => { state.byAddress[networkId][poolAddress] = { ...state.byAddress[networkId][poolAddress], chartData: chartData } }) .addCase(updatePoolTransactions, (state, { payload: { poolAddress, transactions, networkId } }) => { state.byAddress[networkId][poolAddress] = { ...state.byAddress[networkId][poolAddress], transactions } }) .addCase(updateTickData, (state, { payload: { poolAddress, tickData, networkId } }) => { state.byAddress[networkId][poolAddress] = { ...state.byAddress[networkId][poolAddress], tickData } }), ) ================================================ FILE: src/state/pools/updater.ts ================================================ import { useUpdatePoolData, useAllPoolData, useAddPoolKeys } from './hooks' import { useEffect, useMemo } from 'react' import { useTopPoolAddresses } from 'data/pools/topPools' import { usePoolDatas } from 'data/pools/poolData' import { POOL_HIDE } from '../../constants' import { useActiveNetworkVersion } from 'state/application/hooks' export default function Updater(): null { // updaters const [currentNetwork] = useActiveNetworkVersion() const updatePoolData = useUpdatePoolData() const addPoolKeys = useAddPoolKeys() // data const allPoolData = useAllPoolData() const { loading, error, addresses } = useTopPoolAddresses() // add top pools on first load useEffect(() => { if (addresses && !error && !loading) { addPoolKeys(addresses) } }, [addPoolKeys, addresses, error, loading]) // load data for pools we need to hide useEffect(() => { addPoolKeys(POOL_HIDE[currentNetwork.id]) }, [addPoolKeys, currentNetwork.id]) // detect for which addresses we havent loaded pool data yet const unfetchedPoolAddresses = useMemo(() => { return Object.keys(allPoolData).reduce((accum: string[], key) => { const poolData = allPoolData[key] if (!poolData.data || !poolData.lastUpdated) { accum.push(key) } return accum }, []) }, [allPoolData]) // update unloaded pool entries with fetched data const { error: poolDataError, loading: poolDataLoading, data: poolDatas } = usePoolDatas(unfetchedPoolAddresses) useEffect(() => { if (poolDatas && !poolDataError && !poolDataLoading) { updatePoolData(Object.values(poolDatas)) } }, [poolDataError, poolDataLoading, poolDatas, updatePoolData]) return null } ================================================ FILE: src/state/protocol/actions.ts ================================================ import { ProtocolData } from './reducer' import { createAction } from '@reduxjs/toolkit' import { ChartDayData, Transaction } from 'types' import { SupportedNetwork } from 'constants/networks' // protocol wide info export const updateProtocolData = createAction<{ protocolData: ProtocolData; networkId: SupportedNetwork }>( 'protocol/updateProtocolData', ) export const updateChartData = createAction<{ chartData: ChartDayData[]; networkId: SupportedNetwork }>( 'protocol/updateChartData', ) export const updateTransactions = createAction<{ transactions: Transaction[]; networkId: SupportedNetwork }>( 'protocol/updateTransactions', ) ================================================ FILE: src/state/protocol/hooks.ts ================================================ import { updateProtocolData, updateChartData, updateTransactions } from './actions' import { AppState, AppDispatch } from './../index' import { ProtocolData } from './reducer' import { useCallback } from 'react' import { useDispatch, useSelector } from 'react-redux' import { ChartDayData, Transaction } from 'types' import { useActiveNetworkVersion } from 'state/application/hooks' export function useProtocolData(): [ProtocolData | undefined, (protocolData: ProtocolData) => void] { const [activeNetwork] = useActiveNetworkVersion() const protocolData: ProtocolData | undefined = useSelector( (state: AppState) => state.protocol[activeNetwork.id]?.data, ) const dispatch = useDispatch() const setProtocolData: (protocolData: ProtocolData) => void = useCallback( (protocolData: ProtocolData) => dispatch(updateProtocolData({ protocolData, networkId: activeNetwork.id })), [activeNetwork.id, dispatch], ) return [protocolData, setProtocolData] } export function useProtocolChartData(): [ChartDayData[] | undefined, (chartData: ChartDayData[]) => void] { const [activeNetwork] = useActiveNetworkVersion() const chartData: ChartDayData[] | undefined = useSelector( (state: AppState) => state.protocol[activeNetwork.id]?.chartData, ) const dispatch = useDispatch() const setChartData: (chartData: ChartDayData[]) => void = useCallback( (chartData: ChartDayData[]) => dispatch(updateChartData({ chartData, networkId: activeNetwork.id })), [activeNetwork.id, dispatch], ) return [chartData, setChartData] } export function useProtocolTransactions(): [Transaction[] | undefined, (transactions: Transaction[]) => void] { const [activeNetwork] = useActiveNetworkVersion() const transactions: Transaction[] | undefined = useSelector( (state: AppState) => state.protocol[activeNetwork.id]?.transactions, ) const dispatch = useDispatch() const setTransactions: (transactions: Transaction[]) => void = useCallback( (transactions: Transaction[]) => dispatch(updateTransactions({ transactions, networkId: activeNetwork.id })), [activeNetwork.id, dispatch], ) return [transactions, setTransactions] } ================================================ FILE: src/state/protocol/reducer.ts ================================================ import { currentTimestamp } from './../../utils/index' import { updateProtocolData, updateChartData, updateTransactions } from './actions' import { createReducer } from '@reduxjs/toolkit' import { ChartDayData, Transaction } from 'types' import { SupportedNetwork } from 'constants/networks' export interface ProtocolData { // volume volumeUSD: number volumeUSDChange: number // in range liquidity tvlUSD: number tvlUSDChange: number // fees feesUSD: number feeChange: number // transactions txCount: number txCountChange: number } export interface ProtocolState { [networkId: string]: { // timestamp for last updated fetch readonly lastUpdated: number | undefined // overview data readonly data: ProtocolData | undefined readonly chartData: ChartDayData[] | undefined readonly transactions: Transaction[] | undefined } } const DEFAULT_INITIAL_STATE = { data: undefined, chartData: undefined, transactions: undefined, lastUpdated: undefined, } export const initialState: ProtocolState = { [SupportedNetwork.ETHEREUM]: DEFAULT_INITIAL_STATE, [SupportedNetwork.ARBITRUM]: DEFAULT_INITIAL_STATE, [SupportedNetwork.OPTIMISM]: DEFAULT_INITIAL_STATE, [SupportedNetwork.POLYGON]: DEFAULT_INITIAL_STATE, [SupportedNetwork.CELO]: DEFAULT_INITIAL_STATE, [SupportedNetwork.BNB]: DEFAULT_INITIAL_STATE, [SupportedNetwork.AVALANCHE]: DEFAULT_INITIAL_STATE, [SupportedNetwork.BASE]: DEFAULT_INITIAL_STATE, } export default createReducer(initialState, (builder) => builder .addCase(updateProtocolData, (state, { payload: { protocolData, networkId } }) => { state[networkId].data = protocolData // mark when last updated state[networkId].lastUpdated = currentTimestamp() }) .addCase(updateChartData, (state, { payload: { chartData, networkId } }) => { state[networkId].chartData = chartData }) .addCase(updateTransactions, (state, { payload: { transactions, networkId } }) => { state[networkId].transactions = transactions }), ) ================================================ FILE: src/state/protocol/updater.ts ================================================ import { useProtocolData, useProtocolChartData, useProtocolTransactions } from './hooks' import { useEffect } from 'react' import { useFetchProtocolData } from 'data/protocol/overview' import { useFetchGlobalChartData } from 'data/protocol/chart' import { fetchTopTransactions } from 'data/protocol/transactions' import { useClients } from 'state/application/hooks' export default function Updater(): null { // client for data fetching const { dataClient } = useClients() const [protocolData, updateProtocolData] = useProtocolData() const { data: fetchedProtocolData, error, loading } = useFetchProtocolData() const [chartData, updateChartData] = useProtocolChartData() const { data: fetchedChartData, error: chartError } = useFetchGlobalChartData() const [transactions, updateTransactions] = useProtocolTransactions() // update overview data if available and not set useEffect(() => { if (protocolData === undefined && fetchedProtocolData && !loading && !error) { updateProtocolData(fetchedProtocolData) } }, [error, fetchedProtocolData, loading, protocolData, updateProtocolData]) // update global chart data if available and not set useEffect(() => { if (chartData === undefined && fetchedChartData && !chartError) { updateChartData(fetchedChartData) } }, [chartData, chartError, fetchedChartData, updateChartData]) useEffect(() => { async function fetch() { const data = await fetchTopTransactions(dataClient) if (data) { updateTransactions(data) } } if (!transactions) { fetch() } }, [transactions, updateTransactions, dataClient]) return null } ================================================ FILE: src/state/tokens/actions.ts ================================================ import { createAction } from '@reduxjs/toolkit' import { TokenData, TokenChartEntry } from './reducer' import { PriceChartEntry, Transaction } from 'types' import { SupportedNetwork } from 'constants/networks' // protocol wide info export const updateTokenData = createAction<{ tokens: TokenData[]; networkId: SupportedNetwork }>( 'tokens/updateTokenData', ) // add token address to byAddress export const addTokenKeys = createAction<{ tokenAddresses: string[]; networkId: SupportedNetwork }>( 'tokens/addTokenKeys', ) // add list of pools token is in export const addPoolAddresses = createAction<{ tokenAddress: string poolAddresses: string[] networkId: SupportedNetwork }>('tokens/addPoolAddresses') // tvl and volume data over time export const updateChartData = createAction<{ tokenAddress: string chartData: TokenChartEntry[] networkId: SupportedNetwork }>('tokens/updateChartData') // transactions export const updateTransactions = createAction<{ tokenAddress: string transactions: Transaction[] networkId: SupportedNetwork }>('tokens/updateTransactions') // price data at arbitrary intervals export const updatePriceData = createAction<{ tokenAddress: string secondsInterval: number priceData: PriceChartEntry[] | undefined oldestFetchedTimestamp: number networkId: SupportedNetwork }>('tokens/updatePriceData') ================================================ FILE: src/state/tokens/hooks.ts ================================================ import { AppState, AppDispatch } from './../index' import { TokenData, TokenChartEntry } from './reducer' import { useCallback, useEffect, useState, useMemo } from 'react' import { useDispatch, useSelector } from 'react-redux' import { updateTokenData, addTokenKeys, addPoolAddresses, updateChartData, updatePriceData, updateTransactions, } from './actions' import { isAddress } from 'ethers' import { fetchPoolsForToken } from 'data/tokens/poolsForToken' import { fetchTokenChartData } from 'data/tokens/chartData' import { fetchTokenPriceData } from 'data/tokens/priceData' import { fetchTokenTransactions } from 'data/tokens/transactions' import { PriceChartEntry, Transaction } from 'types' import { notEmpty } from 'utils' import dayjs, { OpUnitType } from 'dayjs' import utc from 'dayjs/plugin/utc' import { useActiveNetworkVersion, useClients } from 'state/application/hooks' // format dayjs with the libraries that we need dayjs.extend(utc) export function useAllTokenData(): { [address: string]: { data: TokenData | undefined; lastUpdated: number | undefined } } { const [activeNetwork] = useActiveNetworkVersion() return useSelector((state: AppState) => state.tokens.byAddress[activeNetwork.id] ?? {}) } export function useUpdateTokenData(): (tokens: TokenData[]) => void { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() return useCallback( (tokens: TokenData[]) => { dispatch(updateTokenData({ tokens, networkId: activeNetwork.id })) }, [activeNetwork.id, dispatch], ) } export function useAddTokenKeys(): (addresses: string[]) => void { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() return useCallback( (tokenAddresses: string[]) => dispatch(addTokenKeys({ tokenAddresses, networkId: activeNetwork.id })), [activeNetwork.id, dispatch], ) } export function useTokenDatas(addresses: string[] | undefined): TokenData[] | undefined { const allTokenData = useAllTokenData() const addTokenKeys = useAddTokenKeys() // if token not tracked yet track it addresses?.map((a) => { if (!allTokenData[a]) { addTokenKeys([a]) } }) const data = useMemo(() => { if (!addresses) { return [] } return addresses .map((a) => { return allTokenData[a]?.data }) .filter(notEmpty) as TokenData[] }, [addresses, allTokenData]) return data } export function useTokenData(address: string | undefined): TokenData | undefined { const allTokenData = useAllTokenData() const addTokenKeys = useAddTokenKeys() // if invalid address return if (!address || !isAddress(address)) { return undefined } // if token not tracked yet track it if (!allTokenData[address]) { addTokenKeys([address]) } // return data return allTokenData[address]?.data } /** * Get top pools addresses that token is included in * If not loaded, fetch and store * @param address */ export function usePoolsForToken(address: string): string[] | undefined { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() const token = useSelector((state: AppState) => state.tokens.byAddress[activeNetwork.id]?.[address]) const poolsForToken = token.poolAddresses const [error, setError] = useState(false) const { dataClient } = useClients() useEffect(() => { async function fetch() { const { loading, error, addresses } = await fetchPoolsForToken(address, dataClient) if (!loading && !error && addresses) { dispatch(addPoolAddresses({ tokenAddress: address, poolAddresses: addresses, networkId: activeNetwork.id })) } if (error) { setError(error) } } if (!poolsForToken && !error) { fetch() } }, [address, dispatch, error, poolsForToken, dataClient, activeNetwork.id]) // return data return poolsForToken } /** * Get top pools addresses that token is included in * If not loaded, fetch and store * @param address */ export function useTokenChartData(address: string): TokenChartEntry[] | undefined { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() const token = useSelector((state: AppState) => state.tokens.byAddress[activeNetwork.id]?.[address]) const chartData = token.chartData const [error, setError] = useState(false) const { dataClient } = useClients() useEffect(() => { async function fetch() { const { error, data } = await fetchTokenChartData(address, dataClient) if (!error && data) { dispatch(updateChartData({ tokenAddress: address, chartData: data, networkId: activeNetwork.id })) } if (error) { setError(error) } } if (!chartData && !error) { fetch() } }, [address, dispatch, error, chartData, dataClient, activeNetwork.id]) // return data return chartData } /** * Get top pools addresses that token is included in * If not loaded, fetch and store * @param address */ export function useTokenPriceData( address: string, interval: number, timeWindow: OpUnitType, ): PriceChartEntry[] | undefined { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() const token = useSelector((state: AppState) => state.tokens.byAddress[activeNetwork.id]?.[address]) const priceData = token.priceData[interval] const [error, setError] = useState(false) const { dataClient, blockClient } = useClients() // construct timestamps and check if we need to fetch more data const oldestTimestampFetched = token.priceData.oldestFetchedTimestamp const utcCurrentTime = dayjs() const startTimestamp = utcCurrentTime.subtract(1, timeWindow).startOf('hour').unix() useEffect(() => { async function fetch() { const { data, error: fetchingError } = await fetchTokenPriceData( address, interval, startTimestamp, dataClient, blockClient, ) if (data) { dispatch( updatePriceData({ tokenAddress: address, secondsInterval: interval, priceData: data, oldestFetchedTimestamp: startTimestamp, networkId: activeNetwork.id, }), ) } if (fetchingError) { setError(true) } } if (!priceData && !error) { fetch() } }, [ activeNetwork.id, address, blockClient, dataClient, dispatch, error, interval, oldestTimestampFetched, priceData, startTimestamp, timeWindow, ]) // return data return priceData } /** * Get top pools addresses that token is included in * If not loaded, fetch and store * @param address */ export function useTokenTransactions(address: string): Transaction[] | undefined { const dispatch = useDispatch() const [activeNetwork] = useActiveNetworkVersion() const token = useSelector((state: AppState) => state.tokens.byAddress[activeNetwork.id]?.[address]) const transactions = token.transactions const [error, setError] = useState(false) const { dataClient } = useClients() useEffect(() => { async function fetch() { const { error, data } = await fetchTokenTransactions(address, dataClient) if (error) { setError(true) } else if (data) { dispatch(updateTransactions({ tokenAddress: address, transactions: data, networkId: activeNetwork.id })) } } if (!transactions && !error) { fetch() } }, [activeNetwork.id, address, dataClient, dispatch, error, transactions]) // return data return transactions } ================================================ FILE: src/state/tokens/reducer.ts ================================================ import { currentTimestamp } from './../../utils/index' import { updateTokenData, addTokenKeys, addPoolAddresses, updateChartData, updatePriceData, updateTransactions, } from './actions' import { createReducer } from '@reduxjs/toolkit' import { PriceChartEntry, Transaction } from 'types' import { SupportedNetwork } from 'constants/networks' export type TokenData = { // token is in some pool on uniswap exists: boolean // basic token info name: string symbol: string address: string // volume volumeUSD: number volumeUSDChange: number volumeUSDWeek: number txCount: number //fees feesUSD: number // tvl tvlToken: number tvlUSD: number tvlUSDChange: number priceUSD: number priceUSDChange: number priceUSDChangeWeek: number } export interface TokenChartEntry { date: number volumeUSD: number totalValueLockedUSD: number } export interface TokensState { // analytics data from byAddress: { [networkId: string]: { [address: string]: { data: TokenData | undefined poolAddresses: string[] | undefined chartData: TokenChartEntry[] | undefined priceData: { oldestFetchedTimestamp?: number | undefined [secondsInterval: number]: PriceChartEntry[] | undefined } transactions: Transaction[] | undefined lastUpdated: number | undefined } } } } export const initialState: TokensState = { byAddress: { [SupportedNetwork.ETHEREUM]: {}, [SupportedNetwork.ARBITRUM]: {}, [SupportedNetwork.OPTIMISM]: {}, [SupportedNetwork.POLYGON]: {}, [SupportedNetwork.CELO]: {}, [SupportedNetwork.BNB]: {}, [SupportedNetwork.AVALANCHE]: {}, [SupportedNetwork.BASE]: {}, }, } export default createReducer(initialState, (builder) => builder .addCase(updateTokenData, (state, { payload: { tokens, networkId } }) => { tokens.map( (tokenData) => (state.byAddress[networkId][tokenData.address] = { ...state.byAddress[networkId][tokenData.address], data: tokenData, lastUpdated: currentTimestamp(), }), ) }) // add address to byAddress keys if not included yet .addCase(addTokenKeys, (state, { payload: { tokenAddresses, networkId } }) => { tokenAddresses.map((address) => { if (!state.byAddress[networkId][address]) { state.byAddress[networkId][address] = { poolAddresses: undefined, data: undefined, chartData: undefined, priceData: {}, transactions: undefined, lastUpdated: undefined, } } }) }) // add list of pools the token is included in .addCase(addPoolAddresses, (state, { payload: { tokenAddress, poolAddresses, networkId } }) => { state.byAddress[networkId][tokenAddress] = { ...state.byAddress[networkId][tokenAddress], poolAddresses } }) // add list of pools the token is included in .addCase(updateChartData, (state, { payload: { tokenAddress, chartData, networkId } }) => { state.byAddress[networkId][tokenAddress] = { ...state.byAddress[networkId][tokenAddress], chartData } }) // add list of pools the token is included in .addCase(updateTransactions, (state, { payload: { tokenAddress, transactions, networkId } }) => { state.byAddress[networkId][tokenAddress] = { ...state.byAddress[networkId][tokenAddress], transactions } }) // update historical price volume based on interval size .addCase( updatePriceData, (state, { payload: { tokenAddress, secondsInterval, priceData, oldestFetchedTimestamp, networkId } }) => { state.byAddress[networkId][tokenAddress] = { ...state.byAddress[networkId][tokenAddress], priceData: { ...state.byAddress[networkId][tokenAddress].priceData, [secondsInterval]: priceData, oldestFetchedTimestamp, }, } }, ), ) ================================================ FILE: src/state/tokens/updater.ts ================================================ import { useAllTokenData, useUpdateTokenData, useAddTokenKeys } from './hooks' import { useEffect, useMemo } from 'react' import { useTopTokenAddresses } from '../../data/tokens/topTokens' import { useFetchedTokenDatas } from 'data/tokens/tokenData' export default function Updater(): null { // updaters const updateTokenDatas = useUpdateTokenData() const addTokenKeys = useAddTokenKeys() // intitial data const allTokenData = useAllTokenData() const { loading, error, addresses } = useTopTokenAddresses() // add top pools on first load useEffect(() => { if (addresses && !error && !loading) { addTokenKeys(addresses) } }, [addTokenKeys, addresses, error, loading]) // detect for which addresses we havent loaded token data yet const unfetchedTokenAddresses = useMemo(() => { return Object.keys(allTokenData).reduce((accum: string[], key) => { const tokenData = allTokenData[key] if (!tokenData || !tokenData.data || !tokenData.lastUpdated) { accum.push(key) } return accum }, []) }, [allTokenData]) // update unloaded pool entries with fetched data const { error: tokenDataError, loading: tokenDataLoading, data: tokenDatas, } = useFetchedTokenDatas(unfetchedTokenAddresses) useEffect(() => { if (tokenDatas && !tokenDataError && !tokenDataLoading) { updateTokenDatas(Object.values(tokenDatas)) } }, [tokenDataError, tokenDataLoading, tokenDatas, updateTokenDatas]) return null } ================================================ FILE: src/state/user/actions.ts ================================================ import { createAction } from '@reduxjs/toolkit' export interface SerializedToken { chainId: number address: string decimals: number symbol?: string name?: string } export interface SerializedPair { token0: SerializedToken token1: SerializedToken } export const updateMatchesDarkMode = createAction<{ matchesDarkMode: boolean }>('user/updateMatchesDarkMode') export const updateUserDarkMode = createAction<{ userDarkMode: boolean }>('user/updateUserDarkMode') export const addSerializedToken = createAction<{ serializedToken: SerializedToken }>('user/addSerializedToken') export const removeSerializedToken = createAction<{ chainId: number; address: string }>('user/removeSerializedToken') export const addSavedToken = createAction<{ address: string }>('user/addSavedToken') export const addSavedPool = createAction<{ address: string }>('user/addSavedPool') export const addSerializedPair = createAction<{ serializedPair: SerializedPair }>('user/addSerializedPair') export const removeSerializedPair = createAction<{ chainId: number; tokenAAddress: string; tokenBAddress: string }>( 'user/removeSerializedPair', ) export const toggleURLWarning = createAction('app/toggleURLWarning') ================================================ FILE: src/state/user/hooks.tsx ================================================ import { Token } from '@uniswap/sdk-core' import { useCallback } from 'react' import { useDispatch, useSelector } from 'react-redux' import { AppDispatch, AppState } from '../index' import { addSerializedToken, removeSerializedToken, SerializedToken, updateUserDarkMode, toggleURLWarning, addSavedToken, addSavedPool, } from './actions' function serializeToken(token: Token): SerializedToken { return { chainId: token.chainId, address: token.address, decimals: token.decimals, symbol: token.symbol, name: token.name, } } export function useIsDarkMode(): boolean { return true } export function useDarkModeManager(): [boolean, () => void] { const dispatch = useDispatch() const darkMode = true const toggleSetDarkMode = useCallback(() => { dispatch(updateUserDarkMode({ userDarkMode: !darkMode })) }, [darkMode, dispatch]) return [darkMode, toggleSetDarkMode] } export function useAddUserToken(): (token: Token) => void { const dispatch = useDispatch() return useCallback( (token: Token) => { dispatch(addSerializedToken({ serializedToken: serializeToken(token) })) }, [dispatch], ) } export function useSavedTokens(): [string[], (address: string) => void] { const dispatch = useDispatch() const savedTokens = useSelector((state: AppState) => state.user.savedTokens) const updatedSavedTokens = useCallback( (address: string) => { dispatch(addSavedToken({ address })) }, [dispatch], ) return [savedTokens ?? [], updatedSavedTokens] } export function useSavedPools(): [string[], (address: string) => void] { const dispatch = useDispatch() const savedPools = useSelector((state: AppState) => state.user.savedPools) const updateSavedPools = useCallback( (address: string) => { dispatch(addSavedPool({ address })) }, [dispatch], ) return [savedPools ?? [], updateSavedPools] } export function useRemoveUserAddedToken(): (chainId: number, address: string) => void { const dispatch = useDispatch() return useCallback( (chainId: number, address: string) => { dispatch(removeSerializedToken({ chainId, address })) }, [dispatch], ) } export function useURLWarningVisible(): boolean { return useSelector((state: AppState) => state.user.URLWarningVisible) } export function useURLWarningToggle(): () => void { const dispatch = useDispatch() return useCallback(() => dispatch(toggleURLWarning()), [dispatch]) } ================================================ FILE: src/state/user/reducer.test.ts ================================================ import { createStore, Store } from 'redux' import { updateVersion } from '../global/actions' import reducer, { initialState, UserState } from './reducer' describe('swap reducer', () => { let store: Store beforeEach(() => { store = createStore(reducer, initialState) }) describe('updateVersion', () => { it('has no timestamp originally', () => { expect(store.getState().lastUpdateVersionTimestamp).toBeUndefined() }) it('sets the lastUpdateVersionTimestamp', () => { const time = new Date().getTime() store.dispatch(updateVersion()) expect(store.getState().lastUpdateVersionTimestamp).toBeGreaterThanOrEqual(time) }) }) }) ================================================ FILE: src/state/user/reducer.ts ================================================ import { createReducer } from '@reduxjs/toolkit' import { updateVersion } from '../global/actions' import { addSerializedPair, addSerializedToken, removeSerializedPair, removeSerializedToken, SerializedPair, SerializedToken, updateMatchesDarkMode, updateUserDarkMode, toggleURLWarning, addSavedToken, addSavedPool, } from './actions' const currentTimestamp = () => new Date().getTime() export interface UserState { // the timestamp of the last updateVersion action lastUpdateVersionTimestamp?: number userDarkMode: boolean | null // the user's choice for dark mode or light mode matchesDarkMode: boolean // whether the dark mode media query matches tokens: { [chainId: number]: { [address: string]: SerializedToken } } pairs: { [chainId: number]: { // keyed by token0Address:token1Address [key: string]: SerializedPair } } savedTokens: string[] savedPools: string[] timestamp: number URLWarningVisible: boolean } function pairKey(token0Address: string, token1Address: string) { return `${token0Address};${token1Address}` } export const initialState: UserState = { userDarkMode: true, matchesDarkMode: false, tokens: {}, pairs: {}, savedTokens: [], savedPools: [], timestamp: currentTimestamp(), URLWarningVisible: true, } export default createReducer(initialState, (builder) => builder .addCase(updateVersion, (state) => { state.lastUpdateVersionTimestamp = currentTimestamp() }) .addCase(updateUserDarkMode, (state, action) => { state.userDarkMode = action.payload.userDarkMode state.timestamp = currentTimestamp() }) .addCase(updateMatchesDarkMode, (state, action) => { state.matchesDarkMode = action.payload.matchesDarkMode state.timestamp = currentTimestamp() }) .addCase(addSerializedToken, (state, { payload: { serializedToken } }) => { state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {} state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken state.timestamp = currentTimestamp() }) .addCase(removeSerializedToken, (state, { payload: { address, chainId } }) => { state.tokens[chainId] = state.tokens[chainId] || {} delete state.tokens[chainId][address] state.timestamp = currentTimestamp() }) .addCase(addSavedToken, (state, { payload: { address } }) => { if (!state.savedTokens || !state.savedTokens.includes(address)) { const newTokens = state.savedTokens ?? [] newTokens.push(address) state.savedTokens = newTokens } // toggle for delete else if (state.savedTokens && state.savedTokens.includes(address)) { const newTokens = state.savedTokens.filter((x) => x !== address) state.savedTokens = newTokens } }) .addCase(addSavedPool, (state, { payload: { address } }) => { if (!state.savedPools || !state.savedPools.includes(address)) { const newPools = state.savedPools ?? [] newPools.push(address) state.savedPools = newPools } else if (state.savedPools && state.savedPools.includes(address)) { const newPools = state.savedPools.filter((x) => x !== address) state.savedPools = newPools } }) .addCase(addSerializedPair, (state, { payload: { serializedPair } }) => { if ( serializedPair.token0.chainId === serializedPair.token1.chainId && serializedPair.token0.address !== serializedPair.token1.address ) { const chainId = serializedPair.token0.chainId state.pairs[chainId] = state.pairs[chainId] || {} state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair } state.timestamp = currentTimestamp() }) .addCase(removeSerializedPair, (state, { payload: { chainId, tokenAAddress, tokenBAddress } }) => { if (state.pairs[chainId]) { // just delete both keys if either exists delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)] delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)] } state.timestamp = currentTimestamp() }) .addCase(toggleURLWarning, (state) => { state.URLWarningVisible = !state.URLWarningVisible }), ) ================================================ FILE: src/state/user/updater.tsx ================================================ import { useEffect } from 'react' import { useDispatch } from 'react-redux' import { AppDispatch } from '../index' import { updateMatchesDarkMode } from './actions' export default function Updater(): null { const dispatch = useDispatch() // keep dark mode in sync with the system useEffect(() => { const darkHandler = (match: MediaQueryListEvent) => { dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })) } const match = window?.matchMedia('(prefers-color-scheme: dark)') dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })) if (match?.addListener) { match?.addListener(darkHandler) } else if (match?.addEventListener) { match?.addEventListener('change', darkHandler) } return () => { if (match?.removeListener) { match?.removeListener(darkHandler) } else if (match?.removeEventListener) { match?.removeEventListener('change', darkHandler) } } }, [dispatch]) return null } ================================================ FILE: src/theme/DarkModeQueryParamReader.tsx ================================================ import { useEffect } from 'react' import { useDispatch } from 'react-redux' import { useLocation } from 'react-router-dom' import { parse } from 'qs' import { AppDispatch } from '../state' import { updateUserDarkMode } from '../state/user/actions' export default function DarkModeQueryParamReader(): null { const dispatch = useDispatch() const { search } = useLocation() useEffect(() => { if (!search) return if (search.length < 2) return const parsed = parse(search, { parseArrays: false, ignoreQueryPrefix: true, }) const theme = parsed.theme if (typeof theme !== 'string') return if (theme.toLowerCase() === 'light') { dispatch(updateUserDarkMode({ userDarkMode: false })) } else if (theme.toLowerCase() === 'dark') { dispatch(updateUserDarkMode({ userDarkMode: true })) } }, [dispatch, search]) return null } ================================================ FILE: src/theme/components.tsx ================================================ import React, { HTMLProps, useCallback } from 'react' import { Link } from 'react-router-dom' import styled, { keyframes } from 'styled-components' import { darken } from 'polished' import { ArrowLeft, X, ExternalLink as LinkIconFeather, Trash } from 'react-feather' export const ButtonText = styled.button` outline: none; border: none; font-size: inherit; padding: 0; margin: 0; background: none; cursor: pointer; :hover { opacity: 0.7; } :focus { text-decoration: underline; } ` export const Button = styled.button.attrs<{ warning: boolean; backgroundColor: string }>(({ warning, theme }) => ({ backgroundColor: warning ? theme.red1 : theme.primary1, }))` padding: 1rem 2rem 1rem 2rem; border-radius: 3rem; cursor: pointer; user-select: none; font-size: 1rem; border: none; outline: none; background-color: ${({ backgroundColor }) => backgroundColor}; color: ${({ theme }) => theme.white}; width: 100%; :hover, :focus { background-color: ${({ backgroundColor }) => darken(0.05, backgroundColor)}; } :active { background-color: ${({ backgroundColor }) => darken(0.1, backgroundColor)}; } :disabled { background-color: ${({ theme }) => theme.bg1}; color: ${({ theme }) => theme.text4}; cursor: auto; } ` export const CloseIcon = styled(X)<{ onClick: () => void }>` cursor: pointer; ` // for wrapper react feather icons export const IconWrapper = styled.div<{ stroke?: string; size?: string; marginRight?: string; marginLeft?: string }>` display: flex; align-items: center; justify-content: center; width: ${({ size }) => size ?? '20px'}; height: ${({ size }) => size ?? '20px'}; margin-right: ${({ marginRight }) => marginRight ?? 0}; margin-left: ${({ marginLeft }) => marginLeft ?? 0}; & > * { stroke: ${({ theme, stroke }) => stroke ?? theme.blue1}; } ` // A button that triggers some onClick result, but looks like a link. export const LinkStyledButton = styled.button<{ disabled?: boolean }>` border: none; text-decoration: none; background: none; cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')}; color: ${({ theme, disabled }) => (disabled ? theme.text2 : theme.primary1)}; font-weight: 500; :hover { text-decoration: ${({ disabled }) => (disabled ? null : 'underline')}; } :focus { outline: none; text-decoration: ${({ disabled }) => (disabled ? null : 'underline')}; } :active { text-decoration: none; } ` // An internal link from the react-router-dom library that is correctly styled export const StyledInternalLink = styled(Link)<{ fontSize?: string }>` text-decoration: none; cursor: pointer; color: inherit; font-weight: 500; font-size: ${({ fontSize }) => fontSize ?? '16px'}; :hover { text-decoration: none; } :focus { outline: none; text-decoration: none; } :active { text-decoration: none; } ` const StyledLink = styled.a` text-decoration: none; cursor: pointer; color: ${({ theme }) => theme.primary1}; font-weight: 500; display: inline; flex-direction: center; align-items: center; display: flex; :hover { text-decoration: underline; text-decoration: none; opacity: 0.7; } :focus { outline: none; text-decoration: none; } :active { outline: none; text-decoration: none; } ` const LinkIconWrapper = styled.a` text-decoration: none; cursor: pointer; align-items: center; justify-content: center; display: flex; :hover { text-decoration: none; opacity: 0.7; } :focus { outline: none; text-decoration: none; } :active { text-decoration: none; } ` export const LinkIcon = styled(LinkIconFeather)` height: 16px; width: 18px; margin-left: 10px; stroke: ${({ theme }) => theme.blue1}; ` export const TrashIcon = styled(Trash)` height: 16px; width: 18px; margin-left: 10px; stroke: ${({ theme }) => theme.text3}; cursor: pointer; align-items: center; justify-content: center; display: flex; :hover { opacity: 0.7; } ` const rotateImg = keyframes` 0% { transform: perspective(1000px) rotateY(0deg); } 100% { transform: perspective(1000px) rotateY(360deg); } ` export const UniTokenAnimated = styled.img` animation: ${rotateImg} 5s cubic-bezier(0.83, 0, 0.17, 1) infinite; padding: 2rem 0 0 0; filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15)); ` /** * Outbound link that handles firing google analytics events */ export function ExternalLink({ target = '_blank', href, rel = 'noopener noreferrer', ...rest }: Omit, 'as' | 'ref' | 'onClick'> & { href: string }) { const handleClick = useCallback( (event: React.MouseEvent) => { // don't prevent default, don't redirect if it's a new tab if (target === '_blank' || event.ctrlKey || event.metaKey) { } else { event.preventDefault() } }, [target], ) return } export function ExternalLinkIcon({ target = '_blank', href, rel = 'noopener noreferrer', ...rest }: Omit, 'as' | 'ref' | 'onClick'> & { href: string }) { const handleClick = useCallback( (event: React.MouseEvent) => { // don't prevent default, don't redirect if it's a new tab if (target === '_blank' || event.ctrlKey || event.metaKey) { } else { event.preventDefault() } }, [target], ) return ( ) } const rotate = keyframes` from { transform: rotate(0deg); } to { transform: rotate(360deg); } ` export const Spinner = styled.img` animation: 2s ${rotate} linear infinite; width: 16px; height: 16px; ` const BackArrowLink = styled(StyledInternalLink)` color: ${({ theme }) => theme.text1}; ` export function BackArrow({ to }: { to: string }) { return ( ) } export const CustomLightSpinner = styled(Spinner)<{ size: string }>` height: ${({ size }) => size}; width: ${({ size }) => size}; ` export const OnlyMedium = styled.span` ${({ theme }) => theme.mediaWidth.upToMedium` display: none; `}; ` export const HideMedium = styled.span` ${({ theme }) => theme.mediaWidth.upToMedium` display: none; `}; ` export const HideSmall = styled.span` ${({ theme }) => theme.mediaWidth.upToSmall` display: none; `}; ` export const HideExtraSmall = styled.span` ${({ theme }) => theme.mediaWidth.upToExtraSmall` display: none; `}; ` export const ExtraSmallOnly = styled.span` display: none; ${({ theme }) => theme.mediaWidth.upToExtraSmall` display: block; `}; ` ================================================ FILE: src/theme/index.tsx ================================================ import React, { useMemo } from 'react' import styled, { ThemeProvider as StyledComponentsThemeProvider, createGlobalStyle, css, DefaultTheme, } from 'styled-components' import { useIsDarkMode } from '../state/user/hooks' import { Text, TextProps } from 'rebass' import { Colors } from './styled' export * from './components' export const MEDIA_WIDTHS = { upToExtraSmall: 500, upToSmall: 720, upToMedium: 960, upToLarge: 1280, } const mediaWidthTemplates: { [width in keyof typeof MEDIA_WIDTHS]: typeof css } = Object.keys(MEDIA_WIDTHS).reduce( (accumulator, size) => { ;(accumulator as any)[size] = (a: any, b: any, c: any) => css` @media (max-width: ${(MEDIA_WIDTHS as any)[size]}px) { ${css(a, b, c)} } ` return accumulator }, {}, ) as any const white = '#FFFFFF' const black = '#000000' export function colors(darkMode: boolean): Colors { return { // base white, black, // text text1: darkMode ? '#FFFFFF' : '#000000', text2: darkMode ? '#C3C5CB' : '#565A69', text3: darkMode ? '#6C7284' : '#888D9B', text4: darkMode ? '#565A69' : '#C3C5CB', text5: darkMode ? '#2C2F36' : '#EDEEF2', // backgrounds / greys bg0: darkMode ? '#191B1F' : '#F7F8FA', bg1: darkMode ? '#1F2128' : '#FFFFFF', bg2: darkMode ? '#2C2F36' : '#F7F8FA', bg3: darkMode ? '#40444F' : '#EDEEF2', bg4: darkMode ? '#565A69' : '#CED0D9', bg5: darkMode ? '#6C7284' : '#888D9B', //specialty colors modalBG: darkMode ? 'rgba(0,0,0,.425)' : 'rgba(0,0,0,0.3)', advancedBG: darkMode ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.6)', //primary colors primary1: darkMode ? '#2172E5' : '#ff007a', primary2: darkMode ? '#3680E7' : '#FF8CC3', primary3: darkMode ? '#4D8FEA' : '#FF99C9', primary4: darkMode ? '#376bad70' : '#F6DDE8', primary5: darkMode ? '#153d6f70' : '#FDEAF1', // color text primaryText1: darkMode ? '#6da8ff' : '#ff007a', // secondary colors secondary1: darkMode ? '#2172E5' : '#ff007a', secondary2: darkMode ? '#17000b26' : '#F6DDE8', secondary3: darkMode ? '#17000b26' : '#FDEAF1', // other pink1: '#ff007a', red1: '#FD4040', red2: '#F82D3A', red3: '#D60000', green1: '#27AE60', yellow1: '#FFE270', yellow2: '#F3841E', yellow3: '#F3B71E', blue1: '#2172E5', blue2: '#5199FF', // dont wanna forget these blue yet // blue4: darkMode ? '#153d6f70' : '#C4D9F8', // blue5: darkMode ? '#153d6f70' : '#EBF4FF', } } export function theme(darkMode: boolean): DefaultTheme { return { ...colors(darkMode), grids: { sm: 8, md: 12, lg: 24, }, //shadows shadow1: darkMode ? '#000' : '#2F80ED', // media queries mediaWidth: mediaWidthTemplates, // css snippets flexColumnNoWrap: css` display: flex; flex-flow: column nowrap; `, flexRowNoWrap: css` display: flex; flex-flow: row nowrap; `, } } export default function ThemeProvider({ children }: { children: React.ReactNode }) { const darkMode = useIsDarkMode() const themeObject = useMemo(() => theme(darkMode), [darkMode]) return {children} } const TextWrapper = styled(Text)<{ color: keyof Colors }>` color: ${({ color, theme }) => (theme as any)[color]}; ` export const TYPE = { main(props: TextProps) { return }, link(props: TextProps) { return }, label(props: TextProps) { return }, black(props: TextProps) { return }, white(props: TextProps) { return }, body(props: TextProps) { return }, largeHeader(props: TextProps) { return }, mediumHeader(props: TextProps) { return }, subHeader(props: TextProps) { return }, small(props: TextProps) { return }, blue(props: TextProps) { return }, yellow(props: TextProps) { return }, darkGray(props: TextProps) { return }, gray(props: TextProps) { return }, italic(props: TextProps) { return }, error({ error, ...props }: { error: boolean } & TextProps) { return }, } export const FixedGlobalStyle = createGlobalStyle` html, input, textarea, button { font-family: 'Inter', sans-serif; font-display: fallback; } @supports (font-variation-settings: normal) { html, input, textarea, button { font-family: 'Inter var', sans-serif; } } html, body { margin: 0; padding: 0; } a { color: ${colors(false).blue1}; } * { box-sizing: border-box; } button { user-select: none; } html { font-size: 16px; font-variant: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); font-feature-settings: 'ss01' on, 'ss02' on, 'cv01' on, 'cv03' on; } ` export const ThemedGlobalStyle = createGlobalStyle` html { color: ${({ theme }) => theme.text1}; background-color: ${({ theme }) => theme.bg1}; } .three-line-legend-dark { width: 100%; height: 70px; position: absolute; padding: 8px; font-size: 12px; color: white; background-color: transparent; text-align: left; z-index: 10; pointer-events: none; } .tv-lightweight-charts{ width: 100% !important; & > * { width: 100% !important; } } body { min-height: 100vh; background-position: 0 -30vh; background-repeat: no-repeat; } ` ================================================ FILE: src/theme/rebass.d.ts ================================================ import { InterpolationWithTheme } from '@emotion/core' import { BoxProps as BoxP, ButtonProps as ButtonP, FlexProps as FlexP, LinkProps as LinkP, TextProps as TextP, } from 'rebass' declare module 'rebass' { interface BoxProps extends BoxP { css?: InterpolationWithTheme } interface ButtonProps extends ButtonP { css?: InterpolationWithTheme } interface FlexProps extends FlexP { css?: InterpolationWithTheme } interface LinkProps extends LinkP { css?: InterpolationWithTheme } interface TextProps extends TextP { css?: InterpolationWithTheme } } declare global { namespace JSX { interface IntrinsicAttributes { css?: InterpolationWithTheme } } } ================================================ FILE: src/theme/styled.d.ts ================================================ import { FlattenSimpleInterpolation, ThemedCssFunction } from 'styled-components' export type Color = string export interface Colors { // base white: Color black: Color // text text1: Color text2: Color text3: Color text4: Color text5: Color // backgrounds / greys bg0: Color bg1: Color bg2: Color bg3: Color bg4: Color bg5: Color modalBG: Color advancedBG: Color //blues primary1: Color primary2: Color primary3: Color primary4: Color primary5: Color primaryText1: Color // pinks secondary1: Color secondary2: Color secondary3: Color // other pink1: Color red1: Color red2: Color red3: Color green1: Color yellow1: Color yellow2: Color yellow3: Color blue1: Color blue2: Color } export interface Grids { sm: number md: number lg: number } declare module 'styled-components' { export interface DefaultTheme extends Colors { grids: Grids // shadows shadow1: string // media queries mediaWidth: { upToExtraSmall: ThemedCssFunction upToSmall: ThemedCssFunction upToMedium: ThemedCssFunction upToLarge: ThemedCssFunction } // css snippets flexColumnNoWrap: FlattenSimpleInterpolation flexRowNoWrap: FlattenSimpleInterpolation } } ================================================ FILE: src/types/index.ts ================================================ export interface Block { number: number timestamp: string } export enum VolumeWindow { daily, weekly, monthly, } export interface ChartDayData { date: number volumeUSD: number tvlUSD: number } export interface GenericChartEntry { time: string value: number } export enum TransactionType { SWAP, MINT, BURN, } export type Transaction = { type: TransactionType hash: string timestamp: string sender: string token0Symbol: string token1Symbol: string token0Address: string token1Address: string amountUSD: number amountToken0: number amountToken1: number } /** * Formatted type for Candlestick charts */ export type PriceChartEntry = { time: number // unix timestamp open: number close: number high: number low: number } ================================================ FILE: src/utils/chunkArray.test.ts ================================================ import chunkArray from './chunkArray' describe('#chunkArray', () => { it('size 1', () => { expect(chunkArray([1, 2, 3], 1)).toEqual([[1], [2], [3]]) }) it('size 0 throws', () => { expect(() => chunkArray([1, 2, 3], 0)).toThrow('maxChunkSize must be gte 1') }) it('size gte items', () => { expect(chunkArray([1, 2, 3], 3)).toEqual([[1, 2, 3]]) expect(chunkArray([1, 2, 3], 4)).toEqual([[1, 2, 3]]) }) it('size exact half', () => { expect(chunkArray([1, 2, 3, 4], 2)).toEqual([ [1, 2], [3, 4], ]) }) it('evenly distributes', () => { const chunked = chunkArray([...Array(100).keys()], 40) expect(chunked).toEqual([ [...Array(34).keys()], [...Array(34).keys()].map((i) => i + 34), [...Array(32).keys()].map((i) => i + 68), ]) expect(chunked[0][0]).toEqual(0) expect(chunked[2][31]).toEqual(99) }) }) ================================================ FILE: src/utils/chunkArray.ts ================================================ // chunks array into chunks of maximum size // evenly distributes items among the chunks export default function chunkArray(items: T[], maxChunkSize: number): T[][] { if (maxChunkSize < 1) throw new Error('maxChunkSize must be gte 1') if (items.length <= maxChunkSize) return [items] const numChunks: number = Math.ceil(items.length / maxChunkSize) const chunkSize = Math.ceil(items.length / numChunks) return [...Array(numChunks).keys()].map((ix) => items.slice(ix * chunkSize, ix * chunkSize + chunkSize)) } ================================================ FILE: src/utils/contenthashToUri.test.skip.ts ================================================ import contenthashToUri, { hexToUint8Array } from './contenthashToUri' // this test is skipped for now because importing CID results in // TypeError: TextDecoder is not a constructor describe('#contenthashToUri', () => { it('1inch.tokens.eth contenthash', () => { expect(contenthashToUri('0xe3010170122013e051d1cfff20606de36845d4fe28deb9861a319a5bc8596fa4e610e8803918')).toEqual( 'ipfs://QmPgEqyV3m8SB52BS2j2mJpu9zGprhj2BGCHtRiiw2fdM1', ) }) it('uniswap.eth contenthash', () => { expect(contenthashToUri('0xe5010170000f6170702e756e69737761702e6f7267')).toEqual('ipns://app.uniswap.org') }) }) describe('#hexToUint8Array', () => { it('common case', () => { expect(hexToUint8Array('0x010203fdfeff')).toEqual(new Uint8Array([1, 2, 3, 253, 254, 255])) }) }) ================================================ FILE: src/utils/contenthashToUri.ts ================================================ import CID from 'cids' import { getCodec, rmPrefix } from 'multicodec' import { decode, toB58String } from 'multihashes' export function hexToUint8Array(hex: string): Uint8Array { hex = hex.startsWith('0x') ? hex.substr(2) : hex if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2') const arr = new Uint8Array(hex.length / 2) for (let i = 0; i < arr.length; i++) { arr[i] = parseInt(hex.substr(i * 2, 2), 16) } return arr } const UTF_8_DECODER = new TextDecoder() /** * Returns the URI representation of the content hash for supported codecs * @param contenthash to decode */ export default function contenthashToUri(contenthash: string): string { const buff = hexToUint8Array(contenthash) const codec = getCodec(buff as Buffer) // the typing is wrong for @types/multicodec switch (codec) { case 'ipfs-ns': { const data = rmPrefix(buff as Buffer) const cid = new CID(data) return `ipfs://${toB58String(cid.multihash)}` } case 'ipns-ns': { const data = rmPrefix(buff as Buffer) const cid = new CID(data) const multihash = decode(cid.multihash) if (multihash.name === 'identity') { return `ipns://${UTF_8_DECODER.decode(multihash.digest).trim()}` } else { return `ipns://${toB58String(cid.multihash)}` } } default: throw new Error(`Unrecognized codec: ${codec}`) } } ================================================ FILE: src/utils/currencyId.ts ================================================ import { Currency } from '@uniswap/sdk-core' export function currencyId(currency: Currency): string { if (currency.isNative) return 'ETH' if (currency.isToken) return currency.address throw new Error('invalid currency') } ================================================ FILE: src/utils/data.ts ================================================ /** * gets the amoutn difference plus the % change in change itself (second order change) * @param {*} valueNow * @param {*} value24HoursAgo * @param {*} value48HoursAgo */ export const get2DayChange = (valueNow: string, value24HoursAgo: string, value48HoursAgo: string): [number, number] => { // get volume info for both 24 hour periods const currentChange = parseFloat(valueNow) - parseFloat(value24HoursAgo) const previousChange = parseFloat(value24HoursAgo) - parseFloat(value48HoursAgo) const adjustedPercentChange = ((currentChange - previousChange) / previousChange) * 100 if (isNaN(adjustedPercentChange) || !isFinite(adjustedPercentChange)) { return [currentChange, 0] } return [currentChange, adjustedPercentChange] } /** * get standard percent change between two values * @param {*} valueNow * @param {*} value24HoursAgo */ export const getPercentChange = (valueNow: string | undefined, value24HoursAgo: string | undefined): number => { if (valueNow && value24HoursAgo) { const change = ((parseFloat(valueNow) - parseFloat(value24HoursAgo)) / parseFloat(value24HoursAgo)) * 100 if (isFinite(change)) return change } return 0 } ================================================ FILE: src/utils/date.ts ================================================ import dayjs from 'dayjs' export function unixToDate(unix: number, format = 'YYYY-MM-DD'): string { return dayjs.unix(unix).utc().format(format) } export const formatTime = (unix: string, buffer?: number) => { const now = dayjs() const timestamp = dayjs.unix(parseInt(unix)).add(buffer ?? 0, 'minute') const inSeconds = now.diff(timestamp, 'second') const inMinutes = now.diff(timestamp, 'minute') const inHours = now.diff(timestamp, 'hour') const inDays = now.diff(timestamp, 'day') if (inMinutes < 1) { return 'recently' } if (inHours >= 24) { return `${inDays} ${inDays === 1 ? 'day' : 'days'} ago` } else if (inMinutes >= 60) { return `${inHours} ${inHours === 1 ? 'hour' : 'hours'} ago` } else if (inSeconds >= 60) { return `${inMinutes} ${inMinutes === 1 ? 'minute' : 'minutes'} ago` } else { return `${inSeconds} ${inSeconds === 1 ? 'second' : 'seconds'} ago` } } ================================================ FILE: src/utils/getLibrary.ts ================================================ import { Web3Provider } from '@ethersproject/providers' export default function getLibrary(provider: any): Web3Provider { const library = new Web3Provider(provider, 'any') library.pollingInterval = 15000 return library } ================================================ FILE: src/utils/getTokenList.ts ================================================ import { TokenList } from '@uniswap/token-lists' import schema from '@uniswap/token-lists/src/tokenlist.schema.json' import Ajv from 'ajv' import uriToHttp from './uriToHttp' const tokenListValidator = new Ajv({ allErrors: true }).compile(schema) /** * Contains the logic for resolving a list URL to a validated token list * @param listUrl list url * @param resolveENSContentHash resolves an ens name to a contenthash */ export default async function getTokenList(listUrl: string): Promise { const urls = uriToHttp(listUrl) for (let i = 0; i < urls.length; i++) { const url = urls[i] const isLast = i === urls.length - 1 let response try { response = await fetch(url) } catch (error) { console.debug('Failed to fetch list', listUrl, error) if (isLast) throw new Error(`Failed to download list ${listUrl}`) continue } if (!response.ok) { if (isLast) throw new Error(`Failed to download list ${listUrl}`) continue } const json = await response.json() if (!tokenListValidator(json)) { const validationErrors: string = tokenListValidator.errors?.reduce((memo, error) => { const add = `${error.dataPath} ${error.message ?? ''}` return memo.length > 0 ? `${memo}; ${add}` : `${add}` }, '') ?? 'unknown error' throw new Error(`Token list failed validation: ${validationErrors}`) } return json } throw new Error('Unrecognized list URL protocol.') } ================================================ FILE: src/utils/index.ts ================================================ import { getAddress } from '@ethersproject/address' import { BigNumber } from '@ethersproject/bignumber' import { AddressZero } from '@ethersproject/constants' import { Contract } from '@ethersproject/contracts' import { JsonRpcSigner, Web3Provider } from '@ethersproject/providers' import { ChainId, Currency, CurrencyAmount, Fraction, Percent, Token } from '@uniswap/sdk-core' import JSBI from 'jsbi' import { TokenAddressMap } from '../state/lists/hooks' // returns the checksummed address if the address is valid, otherwise returns false export function isAddress(value: any): string | false { try { return getAddress(value) } catch { return false } } const BLOCK_EXPLORER_PREFIXES: { [chainId: number]: string } = { [ChainId.MAINNET]: 'https://etherscan.io', [ChainId.GOERLI]: 'https://goerli.etherscan.io', [ChainId.SEPOLIA]: 'https://sepolia.etherscan.io', [ChainId.ARBITRUM_ONE]: 'https://arbiscan.io', [ChainId.ARBITRUM_GOERLI]: 'https://goerli.arbiscan.io', [ChainId.OPTIMISM]: 'https://optimistic.etherscan.io', [ChainId.OPTIMISM_GOERLI]: 'https://goerli-optimism.etherscan.io', [ChainId.POLYGON]: 'https://polygonscan.com', [ChainId.POLYGON_MUMBAI]: 'https://mumbai.polygonscan.com', [ChainId.CELO]: 'https://celoscan.io', [ChainId.CELO_ALFAJORES]: 'https://alfajores-blockscout.celo-testnet.org', [ChainId.BNB]: 'https://bscscan.com', [ChainId.AVALANCHE]: 'https://snowtrace.io', [ChainId.BASE]: 'https://basescan.org', } export enum ExplorerDataType { TRANSACTION = 'transaction', TOKEN = 'token', ADDRESS = 'address', BLOCK = 'block', NATIVE = 'native', } /** * Return the explorer link for the given data and data type * @param chainId the ID of the chain for which to return the data * @param data the data to return a link for * @param type the type of the data */ export function getExplorerLink(chainId: number, data: string, type: ExplorerDataType): string { const prefix = BLOCK_EXPLORER_PREFIXES[chainId] ?? 'https://etherscan.io' switch (type) { case ExplorerDataType.TRANSACTION: return `${prefix}/tx/${data}` case ExplorerDataType.TOKEN: return `${prefix}/token/${data}` case ExplorerDataType.BLOCK: return `${prefix}/block/${data}` case ExplorerDataType.ADDRESS: return `${prefix}/address/${data}` default: return `${prefix}` } } export const currentTimestamp = () => new Date().getTime() // shorten the checksummed version of the input address to have 0x + 4 characters at start and end export function shortenAddress(address: string, chars = 4): string { const parsed = isAddress(address) if (!parsed) { throw Error(`Invalid 'address' parameter '${address}'.`) } return `${parsed.substring(0, chars + 2)}...${parsed.substring(42 - chars)}` } // add 10% export function calculateGasMargin(value: BigNumber): BigNumber { return value.mul(BigNumber.from(10000).add(BigNumber.from(1000))).div(BigNumber.from(10000)) } // converts a basis points value to a sdk percent export function basisPointsToPercent(num: number): Percent { return new Percent(JSBI.BigInt(num), JSBI.BigInt(10000)) } const ONE = new Fraction(1, 1) export function calculateSlippageAmount(value: CurrencyAmount, slippage: Percent): [JSBI, JSBI] { if (slippage.lessThan(0) || slippage.greaterThan(ONE)) throw new Error('Unexpected slippage') return [value.multiply(ONE.subtract(slippage)).quotient, value.multiply(ONE.add(slippage)).quotient] } // account is not optional export function getSigner(library: Web3Provider, account: string): JsonRpcSigner { return library.getSigner(account).connectUnchecked() } // account is optional export function getProviderOrSigner(library: Web3Provider, account?: string): Web3Provider | JsonRpcSigner { return account ? getSigner(library, account) : library } // account is optional export function getContract(address: string, ABI: any, library: Web3Provider, account?: string): Contract { if (!isAddress(address) || address === AddressZero) { throw Error(`Invalid 'address' parameter '${address}'.`) } return new Contract(address, ABI, getProviderOrSigner(library, account) as any) } export function escapeRegExp(string: string): string { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string } export function isTokenOnList(tokenAddressMap: TokenAddressMap, token?: Token): boolean { return Boolean(token?.isToken && tokenAddressMap[token.chainId]?.[token.address]) } export function feeTierPercent(fee: number): string { return (fee / 10000).toPrecision(1) + '%' } export function notEmpty(value: TValue | null | undefined): value is TValue { return value !== null && value !== undefined } ================================================ FILE: src/utils/isZero.ts ================================================ /** * Returns true if the string value is zero in hex * @param hexNumberString */ export default function isZero(hexNumberString: string) { return /^0x0*$/.test(hexNumberString) } ================================================ FILE: src/utils/listSort.ts ================================================ import { DEFAULT_LIST_OF_LISTS } from './../constants/lists' // use ordering of default list of lists to assign priority export default function sortByListPriority(urlA: string, urlB: string) { const first = DEFAULT_LIST_OF_LISTS.includes(urlA) ? DEFAULT_LIST_OF_LISTS.indexOf(urlA) : Number.MAX_SAFE_INTEGER const second = DEFAULT_LIST_OF_LISTS.includes(urlB) ? DEFAULT_LIST_OF_LISTS.indexOf(urlB) : Number.MAX_SAFE_INTEGER // need reverse order to make sure mapping includes top priority last if (first < second) return 1 else if (first > second) return -1 return 0 } ================================================ FILE: src/utils/listVersionLabel.ts ================================================ import { Version } from '@uniswap/token-lists' export default function listVersionLabel(version: Version): string { return `v${version.major}.${version.minor}.${version.patch}` } ================================================ FILE: src/utils/networkPrefix.ts ================================================ import { EthereumNetworkInfo, NetworkInfo } from 'constants/networks' export function networkPrefix(activeNewtork: NetworkInfo) { const isEthereum = activeNewtork === EthereumNetworkInfo if (isEthereum) { return '/' } const prefix = '/' + activeNewtork.route.toLocaleLowerCase() + '/' return prefix } ================================================ FILE: src/utils/numbers.ts ================================================ import numbro from 'numbro' // using a currency library here in case we want to add more in future export const formatDollarAmount = (num: number | undefined, digits = 2, round = true) => { if (num === 0) return '$0.00' if (!num) return '-' if (num < 0.001 && digits <= 3) { return '<$0.001' } return numbro(num).formatCurrency({ average: round, mantissa: num > 1000 ? 2 : digits, abbreviations: { million: 'M', billion: 'B', }, }) } // using a currency library here in case we want to add more in future export const formatAmount = (num: number | undefined, digits = 2) => { if (num === 0) return '0' if (!num) return '-' if (num < 0.001) { return '<0.001' } return numbro(num).format({ average: true, mantissa: num > 1000 ? 2 : digits, abbreviations: { million: 'M', billion: 'B', }, }) } ================================================ FILE: src/utils/parseENSAddress.test.ts ================================================ import { parseENSAddress } from './parseENSAddress' describe('parseENSAddress', () => { it('test cases', () => { expect(parseENSAddress('hello.eth')).toEqual({ ensName: 'hello.eth', ensPath: undefined }) expect(parseENSAddress('hello.eth/')).toEqual({ ensName: 'hello.eth', ensPath: '/' }) expect(parseENSAddress('hello.world.eth/')).toEqual({ ensName: 'hello.world.eth', ensPath: '/' }) expect(parseENSAddress('hello.world.eth/abcdef')).toEqual({ ensName: 'hello.world.eth', ensPath: '/abcdef' }) expect(parseENSAddress('abso.lutely')).toEqual(undefined) expect(parseENSAddress('abso.lutely.eth')).toEqual({ ensName: 'abso.lutely.eth', ensPath: undefined }) expect(parseENSAddress('eth')).toEqual(undefined) expect(parseENSAddress('eth/hello-world')).toEqual(undefined) expect(parseENSAddress('hello-world.eth')).toEqual({ ensName: 'hello-world.eth', ensPath: undefined }) expect(parseENSAddress('-prefix-dash.eth')).toEqual(undefined) expect(parseENSAddress('suffix-dash-.eth')).toEqual(undefined) expect(parseENSAddress('it.eth')).toEqual({ ensName: 'it.eth', ensPath: undefined }) expect(parseENSAddress('only-single--dash.eth')).toEqual(undefined) }) }) ================================================ FILE: src/utils/parseENSAddress.ts ================================================ const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ export function parseENSAddress(ensAddress: string): { ensName: string; ensPath: string | undefined } | undefined { const match = ensAddress.match(ENS_NAME_REGEX) if (!match) return undefined return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[4] } } ================================================ FILE: src/utils/queries.ts ================================================ import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import dayjs from 'dayjs' /** * Used to get large amounts of data when * @param query * @param localClient * @param vars - any variables that are passed in every query * @param values - the keys that are used as the values to map over if * @param skipCount - amount of entities to skip per query */ export async function splitQuery( query: any, client: ApolloClient, vars: any[], values: any[], skipCount = 1000, ) { let fetchedData = {} as Type let allFound = false let skip = 0 try { while (!allFound) { let end = values.length if (skip + skipCount < values.length) { end = skip + skipCount } const sliced = values.slice(skip, end) const result = await client.query({ query: query(...vars, sliced), fetchPolicy: 'network-only', }) fetchedData = { ...fetchedData, ...result.data, } if (Object.keys(result.data).length < skipCount || skip + skipCount > values.length) { allFound = true } else { skip += skipCount } } return fetchedData } catch (e) { console.log(e) return undefined } } export function useDeltaTimestamps(): [number, number, number] { const utcCurrentTime = dayjs() const t1 = utcCurrentTime.subtract(1, 'day').startOf('minute').unix() const t2 = utcCurrentTime.subtract(2, 'day').startOf('minute').unix() const tWeek = utcCurrentTime.subtract(1, 'week').startOf('minute').unix() return [t1, t2, tWeek] } ================================================ FILE: src/utils/resolveENSContentHash.ts ================================================ import { Contract } from '@ethersproject/contracts' import { Provider } from '@ethersproject/abstract-provider' import { namehash } from 'ethers' const REGISTRAR_ABI = [ { constant: true, inputs: [ { name: 'node', type: 'bytes32', }, ], name: 'resolver', outputs: [ { name: 'resolverAddress', type: 'address', }, ], payable: false, stateMutability: 'view', type: 'function', }, ] const REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' const RESOLVER_ABI = [ { constant: true, inputs: [ { internalType: 'bytes32', name: 'node', type: 'bytes32', }, ], name: 'contenthash', outputs: [ { internalType: 'bytes', name: '', type: 'bytes', }, ], payable: false, stateMutability: 'view', type: 'function', }, ] // cache the resolver contracts since most of them are the public resolver function resolverContract(resolverAddress: string, provider: Provider): Contract { return new Contract(resolverAddress, RESOLVER_ABI, provider) } /** * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI * @param ensName to resolve * @param provider provider to use to fetch the data */ export default async function resolveENSContentHash(ensName: string, provider: Provider): Promise { const ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider) const hash = namehash(ensName) const resolverAddress = await ensRegistrarContract.resolver(hash) return resolverContract(resolverAddress, provider).contenthash(hash) } ================================================ FILE: src/utils/retry.test.ts ================================================ import { retry, RetryableError } from './retry' describe('retry', () => { function makeFn(fails: number, result: T, retryable = true): () => Promise { return async () => { if (fails > 0) { fails-- throw retryable ? new RetryableError('failure') : new Error('bad failure') } return result } } it('fails for non-retryable error', async () => { await expect(retry(makeFn(1, 'abc', false), { n: 3, maxWait: 0, minWait: 0 }).promise).rejects.toThrow( 'bad failure', ) }) it('works after one fail', async () => { await expect(retry(makeFn(1, 'abc'), { n: 3, maxWait: 0, minWait: 0 }).promise).resolves.toEqual('abc') }) it('works after two fails', async () => { await expect(retry(makeFn(2, 'abc'), { n: 3, maxWait: 0, minWait: 0 }).promise).resolves.toEqual('abc') }) it('throws if too many fails', async () => { await expect(retry(makeFn(4, 'abc'), { n: 3, maxWait: 0, minWait: 0 }).promise).rejects.toThrow('failure') }) it('cancel causes promise to reject', async () => { const { promise, cancel } = retry(makeFn(2, 'abc'), { n: 3, minWait: 100, maxWait: 100 }) cancel() await expect(promise).rejects.toThrow('Cancelled') }) it('cancel no-op after complete', async () => { const { promise, cancel } = retry(makeFn(0, 'abc'), { n: 3, minWait: 100, maxWait: 100 }) // defer setTimeout(cancel, 0) await expect(promise).resolves.toEqual('abc') }) async function checkTime(fn: () => Promise, min: number, max: number) { const time = new Date().getTime() await fn() const diff = new Date().getTime() - time expect(diff).toBeGreaterThanOrEqual(min) expect(diff).toBeLessThanOrEqual(max) } it('waits random amount of time between min and max', async () => { const promises = [] for (let i = 0; i < 10; i++) { promises.push( checkTime( () => expect(retry(makeFn(4, 'abc'), { n: 3, maxWait: 100, minWait: 50 }).promise).rejects.toThrow('failure'), 150, 400, ), ) } await Promise.all(promises) }) }) ================================================ FILE: src/utils/retry.ts ================================================ function wait(ms: number): Promise { return new Promise((resolve) => setTimeout(resolve, ms)) } function waitRandom(min: number, max: number): Promise { return wait(min + Math.round(Math.random() * Math.max(0, max - min))) } /** * This error is thrown if the function is cancelled before completing */ export class CancelledError extends Error { constructor() { super('Cancelled') } } /** * Throw this error if the function should retry */ export class RetryableError extends Error {} /** * Retries the function that returns the promise until the promise successfully resolves up to n retries * @param fn function to retry * @param n how many times to retry * @param minWait min wait between retries in ms * @param maxWait max wait between retries in ms */ export function retry( fn: () => Promise, { n, minWait, maxWait }: { n: number; minWait: number; maxWait: number }, ): { promise: Promise; cancel: () => void } { let completed = false let rejectCancelled: (error: Error) => void const promise = new Promise(async (resolve, reject) => { rejectCancelled = reject while (true) { let result: T try { result = await fn() if (!completed) { resolve(result) completed = true } break } catch (error) { if (completed) { break } if (n <= 0 || !(error instanceof RetryableError)) { reject(error) completed = true break } n-- } await waitRandom(minWait, maxWait) } }) return { promise, cancel: () => { if (completed) return completed = true rejectCancelled(new CancelledError()) }, } } ================================================ FILE: src/utils/tokens.ts ================================================ import { Token } from '@uniswap/sdk-core' import { CeloNetworkInfo, NetworkInfo, PolygonNetworkInfo } from 'constants/networks' import { CELO_ADDRESS, MATIC_ADDRESS, WETH_ADDRESSES } from '../constants' export interface SerializedToken { chainId: number address: string decimals: number symbol?: string name?: string } export function serializeToken(token: Token): SerializedToken { return { chainId: token.chainId, address: token.address, decimals: token.decimals, symbol: token.symbol, name: token.name, } } export function formatTokenSymbol(address: string, symbol: string, activeNetwork?: NetworkInfo) { // dumb catch for matic if (address === MATIC_ADDRESS && activeNetwork === PolygonNetworkInfo) { return 'MATIC' } // dumb catch for Celo if (address === CELO_ADDRESS && activeNetwork === CeloNetworkInfo) { return 'CELO' } if (WETH_ADDRESSES.includes(address)) { return 'ETH' } return symbol } export function formatTokenName(address: string, name: string, activeNetwork?: NetworkInfo) { // dumb catch for matic if (address === MATIC_ADDRESS && activeNetwork === PolygonNetworkInfo) { return 'MATIC' } // dumb catch for Celo if (address === CELO_ADDRESS && activeNetwork === CeloNetworkInfo) { return 'CELO' } if (WETH_ADDRESSES.includes(address)) { return 'Ether' } return name } ================================================ FILE: src/utils/uriToHttp.test.ts ================================================ import uriToHttp from './uriToHttp' describe('uriToHttp', () => { it('returns .eth.link for ens names', () => { expect(uriToHttp('t2crtokens.eth')).toEqual([]) }) it('returns https first for http', () => { expect(uriToHttp('http://test.com')).toEqual(['https://test.com', 'http://test.com']) }) it('returns https for https', () => { expect(uriToHttp('https://test.com')).toEqual(['https://test.com']) }) it('returns ipfs gateways for ipfs:// urls', () => { expect(uriToHttp('ipfs://QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ')).toEqual([ 'https://cloudflare-ipfs.com/ipfs/QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ/', 'https://ipfs.io/ipfs/QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ/', ]) }) it('returns ipns gateways for ipns:// urls', () => { expect(uriToHttp('ipns://app.uniswap.org')).toEqual([ 'https://cloudflare-ipfs.com/ipns/app.uniswap.org/', 'https://ipfs.io/ipns/app.uniswap.org/', ]) }) it('returns empty array for invalid scheme', () => { expect(uriToHttp('blah:test')).toEqual([]) }) }) ================================================ FILE: src/utils/uriToHttp.ts ================================================ /** * Given a URI that may be ipfs, ipns, http, or https protocol, return the fetch-able http(s) URLs for the same content * @param uri to convert to fetch-able http url */ export default function uriToHttp(uri: string): string[] { const protocol = uri.split(':')[0].toLowerCase() switch (protocol) { case 'https': return [uri] case 'http': return ['https' + uri.substr(4), uri] case 'ipfs': const hash = uri.match(/^ipfs:(\/\/)?(.*)$/i)?.[2] return [`https://cloudflare-ipfs.com/ipfs/${hash}/`, `https://ipfs.io/ipfs/${hash}/`] case 'ipns': const name = uri.match(/^ipns:(\/\/)?(.*)$/i)?.[2] return [`https://cloudflare-ipfs.com/ipns/${name}/`, `https://ipfs.io/ipns/${name}/`] default: return [] } } ================================================ FILE: src/utils/useDebouncedChangeHandler.tsx ================================================ import { useCallback, useEffect, useRef, useState } from 'react' /** * Easy way to debounce the handling of a rapidly changing value, e.g. a changing slider input * @param value value that is rapidly changing * @param onChange change handler that should receive the debounced updates to the value * @param debouncedMs how long we should wait for changes to be applied */ export default function useDebouncedChangeHandler( value: T, onChange: (newValue: T) => void, debouncedMs = 100, ): [T, (value: T) => void] { const [inner, setInner] = useState(() => value) const timer = useRef>() const onChangeInner = useCallback( (newValue: T) => { setInner(newValue) if (timer.current) { clearTimeout(timer.current) } timer.current = setTimeout(() => { onChange(newValue) timer.current = undefined }, debouncedMs) }, [debouncedMs, onChange], ) useEffect(() => { if (timer.current) { clearTimeout(timer.current) timer.current = undefined } setInner(value) }, [value]) return [inner, onChangeInner] } ================================================ FILE: tsconfig.json ================================================ { "compilerOptions": { "target": "es5", "lib": [ "dom", "dom.iterable", "esnext" ], "allowJs": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, "module": "esnext", "strict": true, "alwaysStrict": true, "strictNullChecks": true, "noUnusedLocals": false, "noFallthroughCasesInSwitch": true, "noImplicitAny": true, "noImplicitThis": true, "noImplicitReturns": true, "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "react-jsx", "downlevelIteration": true, "allowSyntheticDefaultImports": true, "types": [ "react-spring", "jest" ], "baseUrl": "src" }, "exclude": [ "node_modules", "cypress" ], "include": [ "./src/**/*.ts", "./src/**/*.tsx", "src/components/Confetti/index.js" ] }