import Config from '../models/Config' import { Logger } from '../lib' import fs from 'fs' import { homedir } from 'os' export declare type ConfigHelperNetworkName = | 'mainnet' | 'rinkeby' | 'development' | string export declare type ConfigHelperNetworkId = 1 | 4 | number export interface ConfigHelperConfig extends Config { chainId: ConfigHelperNetworkId network: ConfigHelperNetworkName } const configs: ConfigHelperConfig[] = [ { chainId: null, network: 'development', nodeUri: 'http://localhost:8545', factoryAddress: null, metadataStoreUri: 'http://127.0.0.1:5000', providerUri: 'http://127.0.0.1:8030', poolFactoryAddress: null, fixedRateExchangeAddress: null, metadataContractAddress: null }, { chainId: 4, network: 'rinkeby', nodeUri: 'https://rinkeby.infura.io/v3', factoryAddress: '0xA7a711A09396DF82D9be46A26B48BafdB9BB4fA6', oceanTokenAddress: '0x8967BCF84170c91B0d24D4302C2376283b0B3a07', metadataStoreUri: 'https://aquarius.rinkeby.v3.dev-ocean.com', providerUri: 'https://provider.rinkeby.v3.dev-ocean.com', poolFactoryAddress: '0x4658cD157B57E9D0053Bb2d5CbC7B2Aad06dA5E6', fixedRateExchangeAddress: '0x09285F0290D74f01D3287ED9B45d2456956758B4', metadataContractAddress: '0x1da8E04D2ae9b7c32C24e4DB94899b93d8E4751A' }, { chainId: 1, network: 'mainnet', nodeUri: 'https://mainnet.infura.io/v3', factoryAddress: '0x1234', oceanTokenAddress: '0x7AFeBBB46fDb47ed17b22ed075Cde2447694fB9e', metadataStoreUri: null, providerUri: null, poolFactoryAddress: null, fixedRateExchangeAddress: null, metadataContractAddress: null } ] export class ConfigHelper { /* Load contract addresses from env ADDRESS_FILE (generated by ocean-contracts) */ public getAddressesFromEnv(): Partial { try { const data = JSON.parse( fs.readFileSync( process.env.ADDRESS_FILE || `${homedir}/.ocean/ocean-contracts/artifacts/address.json`, 'utf8' ) ) const { DTFactory, BFactory, FixedRateExchange, Metadata } = data?.ganache const configAddresses: Partial = { factoryAddress: DTFactory, poolFactoryAddress: BFactory, fixedRateExchangeAddress: FixedRateExchange, metadataContractAddress: Metadata, ...(process.env.AQUARIUS_URI && { metadataStoreUri: process.env.AQUARIUS_URI }) } return configAddresses } catch (e) { console.error(`Could not load local contract address file: ${e.message}`) return null } } public getConfig( network: ConfigHelperNetworkName | ConfigHelperNetworkId, infuraProjectId?: string ): Config { const filterBy = typeof network === 'string' ? 'network' : 'chainId' let config = configs.find((c) => c[filterBy] === network) if (!config) { Logger.error(`No config found for given network '${network}'`) return null } if (network === 'development') { const contractAddressesConfig = this.getAddressesFromEnv() config = { ...config, ...contractAddressesConfig } } const nodeUri = infuraProjectId ? `${config.nodeUri}/${infuraProjectId}` : config.nodeUri return { ...config, nodeUri } } }