1
0
mirror of https://github.com/oceanprotocol/ocean.js.git synced 2024-11-26 20:39:05 +01:00
ocean.js/src/utils/ConfigHelper.ts
2020-09-30 23:42:35 -07:00

110 lines
3.2 KiB
TypeScript

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<ConfigHelperConfig> {
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<ConfigHelperConfig> = {
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 }
}
}