diff --git a/packages/sol-profiler/src/cost_utils.ts b/packages/sol-profiler/src/cost_utils.ts index 75ebcdb4f0..86d6328a12 100644 --- a/packages/sol-profiler/src/cost_utils.ts +++ b/packages/sol-profiler/src/cost_utils.ts @@ -5,7 +5,7 @@ import { stripHexPrefix } from 'ethereumjs-util'; import * as _ from 'lodash'; const ZERO_BYTE_CALL_DATA_COST = 4; -const NON_ZERO_BYTE_CALL_DATA_COST = 68; +const NON_ZERO_BYTE_CALL_DATA_COST = 16; const WORD_SIZE = 32; const G_MEMORY = 3; const G_QUAD_COEF = 512; @@ -29,7 +29,7 @@ export const costUtils = { const callDataCost = zeroBytesCost + nonZeroBytesCost; logUtils.header('Call data breakdown', '-'); logUtils.table({ - 'call data size (bytes)': callData.length, + 'call data size (bytes)': callDataBuf.byteLength, callDataCost, zeroBytesCost, nonZeroBytesCost, diff --git a/packages/sol-resolver/src/resolvers/fs_resolver.ts b/packages/sol-resolver/src/resolvers/fs_resolver.ts index 248fa405e7..064d83d330 100644 --- a/packages/sol-resolver/src/resolvers/fs_resolver.ts +++ b/packages/sol-resolver/src/resolvers/fs_resolver.ts @@ -9,7 +9,7 @@ export class FSResolver extends Resolver { // tslint:disable-next-line:prefer-function-over-method public resolveIfExists(importPath: string): ContractSource | undefined { if (fs.existsSync(importPath) && fs.lstatSync(importPath).isFile()) { - const fileContent = fs.readFileSync(importPath).toString(); + const fileContent = fs.readFileSync(importPath).toString('ascii'); const absolutePath = path.resolve(importPath); return { source: fileContent, path: importPath, absolutePath } as any; } diff --git a/packages/sol-resolver/src/resolvers/name_resolver.ts b/packages/sol-resolver/src/resolvers/name_resolver.ts index aee326fb7c..0836f1528b 100644 --- a/packages/sol-resolver/src/resolvers/name_resolver.ts +++ b/packages/sol-resolver/src/resolvers/name_resolver.ts @@ -14,12 +14,13 @@ export class NameResolver extends EnumerableResolver { this._contractsDir = contractsDir; } public resolveIfExists(lookupContractName: string): ContractSource | undefined { + const lookupContractNameNormalized = path.basename(lookupContractName, SOLIDITY_FILE_EXTENSION); let contractSource: ContractSource | undefined; const onFile = (filePath: string) => { const contractName = path.basename(filePath, SOLIDITY_FILE_EXTENSION); - if (contractName === lookupContractName) { + if (contractName === lookupContractNameNormalized) { const absoluteContractPath = path.join(this._contractsDir, filePath); - const source = fs.readFileSync(absoluteContractPath).toString(); + const source = fs.readFileSync(absoluteContractPath).toString('ascii'); contractSource = { source, path: filePath, absolutePath: absoluteContractPath }; return true; } @@ -32,7 +33,7 @@ export class NameResolver extends EnumerableResolver { const contractSources: ContractSource[] = []; const onFile = (filePath: string) => { const absoluteContractPath = path.join(this._contractsDir, filePath); - const source = fs.readFileSync(absoluteContractPath).toString(); + const source = fs.readFileSync(absoluteContractPath).toString('ascii'); const contractSource = { source, path: filePath, absolutePath: absoluteContractPath }; contractSources.push(contractSource); }; diff --git a/packages/sol-resolver/src/resolvers/npm_resolver.ts b/packages/sol-resolver/src/resolvers/npm_resolver.ts index 3be61f7215..c5b509f5cb 100644 --- a/packages/sol-resolver/src/resolvers/npm_resolver.ts +++ b/packages/sol-resolver/src/resolvers/npm_resolver.ts @@ -30,7 +30,7 @@ export class NPMResolver extends Resolver { packageScopeIfExists === undefined ? packageName : path.join(packageScopeIfExists, packageName); const lookupPath = path.join(currentPath, 'node_modules', packagePath, pathWithinPackage); if (fs.existsSync(lookupPath) && fs.lstatSync(lookupPath).isFile()) { - const fileContent = fs.readFileSync(lookupPath).toString(); + const fileContent = fs.readFileSync(lookupPath).toString('ascii'); return { source: fileContent, path: importPath, absolutePath: lookupPath }; } currentPath = path.dirname(currentPath); diff --git a/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts b/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts index cfff145f99..30a80bc719 100644 --- a/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts +++ b/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts @@ -15,7 +15,7 @@ export class RelativeFSResolver extends Resolver { public resolveIfExists(importPath: string): ContractSource | undefined { const filePath = path.resolve(path.join(this._contractsDir, importPath)); if (fs.existsSync(filePath) && !fs.lstatSync(filePath).isDirectory()) { - const fileContent = fs.readFileSync(filePath).toString(); + const fileContent = fs.readFileSync(filePath).toString('ascii'); return { source: fileContent, path: importPath, absolutePath: filePath }; } return undefined; diff --git a/packages/sol-resolver/src/resolvers/url_resolver.ts b/packages/sol-resolver/src/resolvers/url_resolver.ts index ef300e6dba..05f934d124 100644 --- a/packages/sol-resolver/src/resolvers/url_resolver.ts +++ b/packages/sol-resolver/src/resolvers/url_resolver.ts @@ -10,7 +10,7 @@ export class URLResolver extends Resolver { const FILE_URL_PREXIF = 'file://'; if (importPath.startsWith(FILE_URL_PREXIF)) { const filePath = importPath.substr(FILE_URL_PREXIF.length); - const fileContent = fs.readFileSync(filePath).toString(); + const fileContent = fs.readFileSync(filePath).toString('ascii'); return { source: fileContent, path: importPath, absolutePath: filePath }; } return undefined; diff --git a/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts b/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts index 3fb38f8e89..d668b58903 100644 --- a/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts +++ b/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts @@ -1,4 +1,11 @@ -import { FallthroughResolver, FSResolver, NPMResolver, RelativeFSResolver, URLResolver } from '@0x/sol-resolver'; +import { + FallthroughResolver, + FSResolver, + NameResolver, + NPMResolver, + RelativeFSResolver, + URLResolver, +} from '@0x/sol-resolver'; import { logUtils } from '@0x/utils'; import { CompilerOptions, ContractArtifact } from 'ethereum-types'; import * as fs from 'fs'; @@ -40,6 +47,7 @@ export class SolCompilerArtifactAdapter extends AbstractArtifactAdapter { this._resolver.appendResolver(new NPMResolver(packagePath)); this._resolver.appendResolver(new RelativeFSResolver(this._sourcesPath)); this._resolver.appendResolver(new FSResolver()); + this._resolver.appendResolver(new NameResolver(this._sourcesPath)); } public async collectContractsDataAsync(): Promise { const artifactsGlob = `${this._artifactsPath}/**/*.json`; @@ -47,7 +55,7 @@ export class SolCompilerArtifactAdapter extends AbstractArtifactAdapter { const contractsData: ContractData[] = []; for (const artifactFileName of artifactFileNames) { const artifact: ContractArtifact = JSON.parse(fs.readFileSync(artifactFileName).toString()); - if (artifact.compilerOutput.evm === undefined) { + if (artifact.compilerOutput === undefined || artifact.compilerOutput.evm === undefined) { logUtils.warn(`${artifactFileName} doesn't contain bytecode. Skipping...`); continue; }