hardhat-remix-analyzer v0.0.3
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-levenshteinImport 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 codeEnvironment 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. defaultdefines 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,
};sourcescan control two things and the key must be a path pointing to a contract file.- which rules in
defaultwill not be applied to a specific contract file. - which new rules will be added for a specific file.
- which rules in
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