import Config from '../models/Config' // eslint-disable-next-line import/no-named-default import { default as DefaultContractsAddresses } from '@oceanprotocol/contracts/addresses/address.json' import LoggerInstance from './Logger' const configHelperNetworksBase: Config = { chainId: null, network: 'unknown', metadataCacheUri: 'https://v4.aquarius.oceanprotocol.com', nodeUri: 'http://127.0.0.1:8545', providerUri: 'http://127.0.0.1:8030', subgraphUri: null, explorerUri: null, oceanTokenAddress: null, oceanTokenSymbol: 'OCEAN', poolTemplateAddress: null, fixedRateExchangeAddress: null, dispenserAddress: null, startBlock: 0, transactionBlockTimeout: 50, transactionConfirmationBlocks: 1, transactionPollingTimeout: 750, gasFeeMultiplier: 1 } export const configHelperNetworks: Config[] = [ { ...configHelperNetworksBase }, { // barge ...configHelperNetworksBase, chainId: 8996, network: 'development', metadataCacheUri: 'http://127.0.0.1:5000', providerUri: 'http://172.15.0.4:8030' }, { ...configHelperNetworksBase, chainId: 3, network: 'ropsten', nodeUri: 'https://ropsten.infura.io/v3', providerUri: 'https://v4.provider.ropsten.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.ropsten.oceanprotocol.com', explorerUri: 'https://ropsten.etherscan.io', gasFeeMultiplier: 1.1 }, { ...configHelperNetworksBase, chainId: 4, network: 'rinkeby', nodeUri: 'https://rinkeby.infura.io/v3', providerUri: 'https://v4.provider.rinkeby.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.rinkeby.oceanprotocol.com', explorerUri: 'https://rinkeby.etherscan.io', gasFeeMultiplier: 1.1 }, { ...configHelperNetworksBase, chainId: 1, network: 'mainnet', nodeUri: 'https://mainnet.infura.io/v3', providerUri: 'https://v4.provider.mainnet.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.mainnet.oceanprotocol.com', explorerUri: 'https://etherscan.io', startBlock: 11105459, transactionBlockTimeout: 150, transactionConfirmationBlocks: 5, transactionPollingTimeout: 1750, gasFeeMultiplier: 1.05 }, { ...configHelperNetworksBase, chainId: 137, network: 'polygon', nodeUri: 'https://polygon-mainnet.infura.io/v3', providerUri: 'https://v4.provider.polygon.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.polygon.oceanprotocol.com', explorerUri: 'https://polygonscan.com', oceanTokenSymbol: 'mOCEAN' }, { ...configHelperNetworksBase, chainId: 1287, network: 'moonbase', nodeUri: 'https://rpc.api.moonbase.moonbeam.network', providerUri: 'https://v4.provider.moonbase.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.moonbase.oceanprotocol.com', explorerUri: 'https://moonbase.moonscan.io/', gasFeeMultiplier: 1.1 }, { ...configHelperNetworksBase, chainId: 2021000, network: 'gaiaxtestnet', nodeUri: 'https://rpc.gaiaxtestnet.oceanprotocol.com', providerUri: 'https://v4.provider.gaiaxtestnet.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.gaiaxtestnet.oceanprotocol.com', explorerUri: 'https://blockscout.gaiaxtestnet.oceanprotocol.com' }, { ...configHelperNetworksBase, chainId: 80001, network: 'mumbai', nodeUri: 'https://polygon-mumbai.infura.io/v3', providerUri: 'https://v4.provider.mumbai.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.mumbai.oceanprotocol.com', explorerUri: 'https://mumbai.polygonscan.com', gasFeeMultiplier: 1.1 }, { ...configHelperNetworksBase, chainId: 56, network: 'bsc', nodeUri: 'https://bsc-dataseed.binance.org', providerUri: 'https://v4.provider.bsc.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.bsc.oceanprotocol.com', explorerUri: 'https://bscscan.com/', gasFeeMultiplier: 1.05 }, { ...configHelperNetworksBase, chainId: 246, network: 'energyweb', nodeUri: 'https://rpc.energyweb.org', providerUri: 'https://v4.provider.energyweb.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.energyweb.oceanprotocol.com', explorerUri: 'https://explorer.energyweb.org', gasFeeMultiplier: 1.05 }, { ...configHelperNetworksBase, chainId: 1285, network: 'moonriver', nodeUri: 'https://moonriver.api.onfinality.io/public', providerUri: 'https://v4.provider.moonriver.oceanprotocol.com', subgraphUri: 'https://v4.subgraph.moonriver.oceanprotocol.com', explorerUri: 'https://moonriver.moonscan.io/', gasFeeMultiplier: 1.05 } ] export class ConfigHelper { /* Load contract addresses from env ADDRESS_FILE (generated by ocean-contracts) */ public getAddressesFromEnv(network: string, customAddresses?: any): Partial { // use the defaults first let configAddresses: Partial // load from custom addresses structure if (customAddresses) { try { const { FixedPrice, Dispenser, Staking, poolTemplate, ERC721Factory, OPFCommunityFeeCollector, Ocean, chainId, startBlock } = customAddresses[network] configAddresses = { erc721FactoryAddress: ERC721Factory, sideStakingAddress: Staking, opfCommunityFeeCollector: OPFCommunityFeeCollector, poolTemplateAddress: poolTemplate, fixedRateExchangeAddress: FixedPrice, dispenserAddress: Dispenser, oceanTokenAddress: Ocean, chainId: chainId, startBlock: startBlock, ...(process.env.AQUARIUS_URI && { metadataCacheUri: process.env.AQUARIUS_URI }) } } catch (e) { // console.error(`ERROR: Could not load local contract address file: ${e.message}`) // return null } } else { // no custom addresses structure was passed, trying to load default if (DefaultContractsAddresses[network]) { const { FixedPrice, Dispenser, Staking, poolTemplate, OPFCommunityFeeCollector, ERC721Factory, Ocean, chainId, startBlock } = DefaultContractsAddresses[network] configAddresses = { erc721FactoryAddress: ERC721Factory, sideStakingAddress: Staking, opfCommunityFeeCollector: OPFCommunityFeeCollector, poolTemplateAddress: poolTemplate, fixedRateExchangeAddress: FixedPrice, dispenserAddress: Dispenser, oceanTokenAddress: Ocean, chainId: chainId, startBlock: startBlock, ...(process.env.AQUARIUS_URI && { metadataCacheUri: process.env.AQUARIUS_URI }) } } } return configAddresses } public getConfig(network: string | number, infuraProjectId?: string): Config { const filterBy = typeof network === 'string' ? 'network' : 'chainId' let config = configHelperNetworks.find((c) => c[filterBy] === network) if (!config) { LoggerInstance.error(`No config found for given network '${network}'`) return null } const contractAddressesConfig = this.getAddressesFromEnv(config.network) config = { ...config, ...contractAddressesConfig } const nodeUri = infuraProjectId ? `${config.nodeUri}/${infuraProjectId}` : config.nodeUri return { ...config, nodeUri } } }