/** The OffsetHelper's purpose is to simplify the carbon offsetting process. Copyright (C) 2022 Toucan Labs 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 . */ import { Client } from "@urql/core"; import { IToucanCarbonOffsets } from "../typechain"; import { Network, PoolSymbol } from "../types"; import { AggregationsMethod, AllTCO2TokensMethod, BridgedBatchTokensMethod, CustomQueryMethod, PoolContentsMethod, ProjectByIdMethod, RedeemsMethod, TCO2TokenByFullSymbolMethod, TCO2TokenByIdMethod, UserBatchesMethod, UserRedeemsMethod, UserRetirementsMethod } from "../types/methods"; import { INetworkTokenAddresses } from "../utils/addresses"; /** * @class ContractInteractions * @description This class helps query Toucan or Toucan-related subgraphs */ declare class SubgraphInteractions { network: Network; addresses: INetworkTokenAddresses; TCO2: IToucanCarbonOffsets | undefined; graphClient: Client; /** * * @param network network that you want to work on */ constructor(network: Network); /** * * Note: It's very important that whenever you change the gql query of any existent * methods, you also change the return type of the method (in types/methods.ts) to * match it. * */ /** * * @description fetches the batches of a user * @param walletAddress address of user to query for * @returns an array of BatchTokens (they contain different properties of the Batch) */ fetchUserBatches: UserBatchesMethod; /** * * @description fetches properties of a TCO2 * @param id id of the TCO2 to query for; the id happens to be the same as the address e.g.: "0x004090eef602e024b2a6cb7f0c1edda992382994" * @returns a TCO2Detail object with properties of the TCO2 (name, address, etc) */ fetchTCO2TokenById: TCO2TokenByIdMethod; /** * * @description fetches properties of a TCO2 * @param symbol full symbol of the TCO2 to query for e.g.: "TCO2-VCS-1718-2013" * @returns a TCO2Detail object with properties of the TCO2 (name, address, etc) */ fetchTCO2TokenByFullSymbol: TCO2TokenByFullSymbolMethod; /** * * @description fetches TCO2Details of all TCO2s * @returns an array of TCO2Detail objects with properties of the TCO2s (name, address, etc) */ fetchAllTCO2Tokens: AllTCO2TokensMethod; /** * * @description fetches data about BatchTokens that have been bridged * @returns an array of BatchTokens containing different properties like id, serialNumber or quantity */ fetchBridgedBatchTokens: BridgedBatchTokensMethod; /** * * @description fetches retirements made by a user * @param walletAddress address of the user/wallet to query for * @param first how many retirements you want fetched; defaults to 100 * @param skip how many (if any) retirements you want skipped; defaults to 0 * @returns an array of objects containing properties of the retirements like id, creationTx, amount and more */ fetchUserRetirements: UserRetirementsMethod; /** * * @description fetches redeems of a given pool * @param pool symbol of pool to fetch for * @param first how many redeems you want fetched; defaults to 100 * @param skip how many (if any) redeems you want skipped; defaults to 0 * @returns an array of objects with properties of the redeems like id, amount, timestamp and more */ fetchRedeems: RedeemsMethod; /** * * @description fetches redeems of a given pool and user * @param walletAddress address of the user/wallet to query for * @param pool symbol of pool to fetch for * @param first how many redeems you want fetched; defaults to 100 * @param skip how many (if any) redeems you want skipped; defaults to 0 * @returns an array of objects with properties of the redeems like id, amount, timestamp and more */ fetchUserRedeems: UserRedeemsMethod; /** * * @description fetches TCO2 tokens that are part of the given pool * @param pool symbol of the pool to fetch for * @param first how many TCO2 tokens you want fetched; defaults to 1000 * @param skip how many (if any) retirements you want skipped; defaults to 0 * @returns an array of objects representing TCO2 tokens and containing properties like name, amount, methodology and more */ fetchPoolContents: PoolContentsMethod; /** * * @description fetches a project by its id * @param id id of the project to fetch; e.g.: "10" * @returns an object with properties of the Project like projectId, region, standard and more */ fetchProjectById: ProjectByIdMethod; /** * * @description fetch all aggregations (including, for example, tco2TotalRetired or totalCarbonBridged) * @returns an array of Aggregation objects containing properties like id, key, value */ fetchAggregations: AggregationsMethod; /** * * @description if pre-made queries to Toucan's Subgraph don't fit all your needs; use this for custom queries * @param query a gql formated GraphQL query * @param params any parameters you may want to pass to the query * @returns all data fetched from query; you can use generics to declare what type to expect (if you're a fan of TS) */ fetchCustomQuery: CustomQueryMethod; private extractPriceInUSD; private fetchTokenPrice; fetchTokenPriceOnDex: (pool: PoolSymbol) => Promise<{ price: number | null; url: string | null; liquidityUSD: number | null; volumeUSD: number | null; }>; /** * * @description gets the contract of a pool token based on the symbol * @param pool symbol of the pool (token) to use * @returns a ethers.contract to interact with the pool */ private getPoolAddress; } export default SubgraphInteractions;