Fix sol-profiler bugs
This commit is contained in:
		@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
        };
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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<ContractData[]> {
 | 
			
		||||
        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;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user