Skip to content

A plugin using remix analyzer for solidity syntax analysis.

License

Notifications You must be signed in to change notification settings

DTeam-Top/hardhat-remix-analyzer

Repository files navigation

npm npm (scoped)

hardhat-remix-analyzer

A plugin using remix analyzer for solidity syntax analysis.

What

This plugin can help solidity developers to find potential issues in their contracts code. It is using remix analyzer as the tool doing this job. So, ideally, it should show developers the same report as what they got when using Remix IDE.

Since it is remix analyzer doing the analyzation job, you can use all the rules it supports. You can find all here.

Installation

npm install hardhat-remix-analyzer @dteam/st2 @remix-project/remix-analyzer fast-levenshtein

Import the plugin in your hardhat.config.js:

require("hardhat-remix-analyzer");

Or if you are using TypeScript, in your hardhat.config.ts:

import "hardhat-remix-analyzer";

Required plugins

None.

Tasks

This plugin adds the analyze task to Hardhat:

  analyze               Analyze the contracts code

Environment extensions

This plugin extends the Hardhat Runtime Environment by adding an analyze function:

hre.analyze(hre);

Configuration

This plugin needs no configuration to run, in this case, it will apply all rules for all the contracts files.

To customize it, you can add analyzerRules to HardhatUserConfig in your hardhat project. The type of the configuration:

export type AnalyzerConfiguration = {
  default?: string[];
  sources?: {
    [source: string]: { [rule: string]: boolean };
  };
};

Where:

  • When it is an empty object like {}, then all rules will be applied.
  • default defines the rules for all contracts files. it is an array of strings. Each element must be one of the following names:
export const ANALYZER_RULES: { [rule: string]: any } = {
  txOrigin,
  gasCosts,
  thisLocal,
  checksEffectsInteraction,
  constantFunctions,
  similarVariableNames,
  inlineAssembly,
  blockTimestamp,
  lowLevelCalls,
  blockBlockhash,
  noReturn,
  selfdestruct,
  guardConditions,
  deleteDynamicArrays,
  assignAndCompare,
  erc20Decimals,
  stringBytesLength,
  intDivisionTruncate,
  etherTransferInLoop,
  deleteFromDynamicArray,
  forLoopIteratesOverDynamicArray,
};
  • sources can control two things and the key must be a path pointing to a contract file.
    • which rules in default will not be applied to a specific contract file.
    • which new rules will be added for a specific file.

An example of configuration:

const config: HardhatUserConfig = {
  ...,
  analyzerRules: {
    default: ["txOrigin", "gasCosts", "thisLocal"],
    sources: {
      "contracts/Global.sol": {
        gasCosts: false,
        thisLocal: false,
        blockTimestamp: true,
      },
    },
  },
};

Usage

There are no additional steps you need to take for this plugin to work.

npx hardhat analyze