aboutsummaryrefslogtreecommitdiffstats
path: root/packages/sol-compiler/src/utils/compiler.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/sol-compiler/src/utils/compiler.ts')
-rw-r--r--packages/sol-compiler/src/utils/compiler.ts23
1 files changed, 18 insertions, 5 deletions
diff --git a/packages/sol-compiler/src/utils/compiler.ts b/packages/sol-compiler/src/utils/compiler.ts
index dffd07b1d..28049e453 100644
--- a/packages/sol-compiler/src/utils/compiler.ts
+++ b/packages/sol-compiler/src/utils/compiler.ts
@@ -9,11 +9,9 @@ import * as path from 'path';
import * as requireFromString from 'require-from-string';
import * as solc from 'solc';
-import { binPaths } from '../solc/bin_paths';
-
import { constants } from './constants';
import { fsWrapper } from './fs_wrapper';
-import { CompilationError } from './types';
+import { BinaryPaths, CompilationError } from './types';
/**
* Gets contract data on network or returns if an artifact does not exist.
@@ -119,6 +117,20 @@ export function parseDependencies(contractSource: ContractSource): string[] {
return dependencies;
}
+let solcJSReleasesCache: BinaryPaths | undefined;
+
+/**
+ * Fetches the list of available solidity compilers
+ */
+export async function getSolcJSReleasesAsync(): Promise<BinaryPaths> {
+ if (_.isUndefined(solcJSReleasesCache)) {
+ const versionList = await fetch('https://ethereum.github.io/solc-bin/bin/list.json');
+ const versionListJSON = await versionList.json();
+ solcJSReleasesCache = versionListJSON.releases;
+ }
+ return solcJSReleasesCache as BinaryPaths;
+}
+
/**
* Compiles the contracts and prints errors/warnings
* @param solcVersion Version of a solc compiler
@@ -239,7 +251,7 @@ export function getSourcesWithDependencies(
contractPath: string,
fullSources: { [sourceName: string]: { id: number } },
): { sourceCodes: { [sourceName: string]: string }; sources: { [sourceName: string]: { id: number } } } {
- const sources = { [contractPath]: { id: fullSources[contractPath].id } };
+ const sources = { [contractPath]: fullSources[contractPath] };
const sourceCodes = { [contractPath]: resolver.resolve(contractPath).source };
recursivelyGatherDependencySources(
resolver,
@@ -319,7 +331,8 @@ function recursivelyGatherDependencySources(
* @param solcVersion The compiler version. e.g. 0.5.0
*/
export async function getSolcJSAsync(solcVersion: string): Promise<solc.SolcInstance> {
- const fullSolcVersion = binPaths[solcVersion];
+ const solcJSReleases = await getSolcJSReleasesAsync();
+ const fullSolcVersion = solcJSReleases[solcVersion];
if (_.isUndefined(fullSolcVersion)) {
throw new Error(`${solcVersion} is not a known compiler version`);
}