Consensys / vscode-solidity-auditor

Solidity language support and visual security auditor for Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=tintinweb.solidity-visual-auditor
GNU General Public License v3.0
580 stars 60 forks source link
security solidity vscode vscode-extension vscode-language vscode-theme

get in touch with Consensys Diligence
[ 🌐 📩 🔥 ]

Solidity Visual Developer

An extension that supports developers in writing secure and well understood code

This extension contributes security centric syntax and semantic highlighting, a detailed class outline, specialized views, advanced Solidity code insights and augmentation to Visual Studio Code.


⚠️ Note: Customize this extension to fit your needs! Show/Hide/Enable/Disable features in Preference → Settings → Solidity Visual Developer: solidity-va.*, select one of the customized security-aware color themes in Preferences → Color Themes.

We ❤ feedback → get in touch!


Marketplace: ext tintinweb.solidity-visual-auditor


theme_light_vs

vscode-solidity-auditor-interactive-graph

visual-auditor-new vscode-solidity-auditor-uml

Features

Semantic highlighting and solidity insights for passive security awareness. Most features are configurable (preferences -> Settings -> Solidity Visual Developer)

Themes (preferences -> Color Theme):

dark_small light_small solarized_small

Syntax Highlighting

Code fragments passively draw your attention to statements that typically reduce risk #c5f015 or need your attention #f03c15.

Semantic Highlighting
Review Features
Graph- and Reporting Features
Code Augmentation
Views

Installation

Method 1: Install by going to Visual Studio Market Place and click Install.

Method 2: Bring up the Extension view in VS Code and search for Solidity Visual Developer and click Install

Method 3 (Manual):

  1. Download the latest compiled extension as *.vsix
  2. Fire up Terminal and install the extension by running code --install-extension "solidity-visual-auditor-0.0.x.vsix"
  3. vscode --> preferences --> color scheme --> Solidity Visual Developer Dark

Tour

Scroll down and take the tour.

visual_auditor_new

Feature: Ethereum Account Address Actions ## Ethereum Account Address Actions - `open` the account on etherscan.io - show the contract `code` - show the `VerifiedContract` source code - `decompile` the byte-code. requires [vscode-decompiler](https://marketplace.visualstudio.com/items?itemName=tintinweb.vscode-decompiler) image
Feature: Semantic function argument highlighting ## Semantic function argument highlighting - arguments are assigned different colors in the scope of the function semantic-arg-dark semantic-arg-light
Feature: Inline Bookmarks ## Inline Bookmarks: @audit tags This feature is provided by [Inline Bookmarks](https://marketplace.visualstudio.com/items?itemName=tintinweb.vscode-inline-bookmarks). - `@audit - ` ... flag lines for security review or start a security review discussion - `@audit-ok - ` ... flag that a line was checked for security or a security discussion on that line turned out to be a non-issue audit-tags
Feature: Code Augmentation / Annotations / Hover / Tooltip ## Code Augmentation / Annotations / Hover / Tooltip - additional information for various keywords (including security notes) code_token_hover - asm instruction signatures code_asm_tooltip - Address hover integration via [tintinweb.vscode-ethover](https://marketplace.visualstudio.com/items?itemName=tintinweb.vscode-ethover) - Open it in etherscan (or whatever you configure) - Show address balance in hover (mainnet) (note: might be rate-limited, configure your API key in settings) - Download the bytecode and disassemble it. - With hover info on instructions - Representation of data as ASCII and resolving 4bytes to funcsigs, Color code reflects the type of instruction: stack, memory, storage, arithm., logic, system, environment, … - Download the bytecode and show it. - With hover info - Click to see instruction boundaries - Color coded bytes to reflect type of instruction) - Show verified contract source (etherscan.io) - Show reconstructed contract source from eveem.org - Show reconstructed contract source from [evm.js](https://www.npmjs.com/package/evm) - run [vscode-decompiler](https://marketplace.visualstudio.com/items?itemName=tintinweb.vscode-decompiler) to decompile it manually using panoramix (eveem.org) locally image
Feature: State Variable Highlighting ## State Variable Highlighting - highlight contract local stateVars (golden box) code_statevar - alert on a shadowed variable (red box) code_shadowed - highlight const stateVar (green box) code_const - highlight inherited stateVar (blue box `Approval`) code_inherited
Feature: CodeLenses ## CodeLenses - surya - interactive graph ![vscode-solidity-auditor-interactive-graph](https://user-images.githubusercontent.com/2865694/57710279-e27e8a00-766c-11e9-9ca9-8cde50aa31fc.gif) - surya - generate report, show inheritance, show AST ![vscode-auditor-surya-report](https://user-images.githubusercontent.com/2865694/55647025-e5b86780-57dc-11e9-9cc0-b5197eb075b8.gif) - flatten source file with [tintinweb.vscode-solidity-flattener](https://marketplace.visualstudio.com/items?itemName=tintinweb.vscode-solidity-flattener) (using [truffle-flattener](https://www.npmjs.com/package/truffle-flattener)) ![vscode-auditor-unittest](https://user-images.githubusercontent.com/2865694/55646826-72aef100-57dc-11e9-800b-fc649b41b4a9.gif) - surya - ftrace ![vscode-auditor-ftrace](https://user-images.githubusercontent.com/2865694/55646883-983bfa80-57dc-11e9-8e40-6194d1429dac.gif) - UML - auto-generate UML for source-units or specific contracts vscode-solidity-auditor-uml - Function Signature Hashes sva_light_vscode
Feature: Outline View ## Outline View - library with function parameters `T` and declarations outline_lib - class and events, functions annotated (stateMutability, visibility) outline_class_event - class and events, functions annotated (stateMutability, visibility) outline_class_2 - inheritance browser - resolves inheritance, only shows inherited names outline_inherit - extra information (subjective function complexity; accesses stateVar?) outline_extra
Feature: Cockpit View ## Cockpit View We've been working on a new cockpit view that allows you to navigate large codebases more efficiently. Check out the new  sidebar-logo  icon in the activity bar to your left. So, what can you do with it? - Explore .sol files with the new workspace explorer - Generate report/graphs for any files/folders selected in the explorer views
imageimage - Conveniently flatten selected files (selected folders or all files in the top-level view) (Note: `truffle-flattener` may require an `npm install` of the project for flattening to work) - Search for contracts that are likely to be deployed in the system (complete workspace or selected folders)
image - Context-sensitive views: click into a contract in the editor to list public state-changing methods
image - Get quick access to extension settings
image And there is more to come 🙌 stay tuned! **Note**: The cockpit view is fully customizable. You can hide both the sidebar menu or any view in the cockpit that you do not need (right-click → hide).
BuiltIn: Commands ## Commands - suggest top level contracts aka "entrypoint contracts" (most derived) - flatten current (codelens) or all suggested top level contracts (command) ![vscode-auditor-flaterra](https://user-images.githubusercontent.com/2865694/55907553-5db8d000-5bd7-11e9-8a11-8cef3964e284.gif) - list all function signatures (human readable or json format) ![vscode-auditor-funcsigs](https://user-images.githubusercontent.com/2865694/55907153-3f9ea000-5bd6-11e9-8a47-e69a762963e9.gif) - open remix in external browser Please refer to the extension's contribution section to show an up-to-date list of commands.
Theme: Solidity Visual Developer Light (VSCode) ## Theme: Solidity Visual Developer Light (VSCode) theme_light_vs
Theme: Solidity Visual Developer Dark ## Theme: Solidity Visual Developer Dark **Simple DAO** screenshot 2019-02-09 at 12 30 30 **Vulnerable Contract** ![highlight](https://user-images.githubusercontent.com/2865694/52523502-4bcbb700-2c92-11e9-9ef1-085e3a244cda.png)
Theme: Solidity Visual Developer Solarized Light ## Theme: Solidity Visual Developer Solarized Light **Simple DAO** screenshot 2019-02-11 at 21 52 11
Configuration: Settings & Customizations ## Extension Settings - `solidity-va.mode.active` .. Enable/Disable all active components of this extension (emergency master-switch). - `Solidity-va.parser.parseImports` ... Whether to recursively parse imports or not - `Solidity-va.hover` ... Enable or Disable generic onHover information (asm instruction signatures, security notes) - `Solidity-va.deco.statevars` ... decorate statevars in code view (golden, green, blue boxes) - `Solidity-va.deco.arguments` ... enable/disable or select the mode for semantic highlighting of function arguments. (default: 'enable' = 'color and arrow') - `Solidity-va.deco.argumentsMode` ... select the mode for semantic highlighting of function arguments (may require a reload) - `Solidity-va.deco.argumentsSuffix` ... a custom Suffix/Symbol that is appended to the decoration when performing semantic highlighting for function arguments - `Solidity-va.outline.enable` ... enable/disable outline and symbolprovider - `Solidity-va.outline.decorations` ... decorate functions according to state mutability function visibility - `Solidity-va.outline.inheritance.show` ... add inherited functions to outline view - `Solidity-va.outline.extras` ... annotate functions with extra information (complexity, statevar access) - `Solidity-va.outline.var.storage_annotations` ... Whether to show/hide storage annotations for variables in the outline view - `Solidity-va.outline.pragmas.show` ... Whether to show/hide pragmas in the outline view - `Solidity-va.outline.imports.show` ... Whether to show/hide imports in the outline view - `Solidity-va.diagnostics.import.cdili-json` ... Automatically import diagnostic issues from external scanners using the `cdili-issue.json` format: ```json { "onInputFile": "contracts/BountiesMetaTxRelayer.sol", "atLineNr": "10", "ruleType": "code_smell", "severity": "major", "linterVersion": "0.1", "linterName": "maru", "message": "State Variable Default Visibility - It is best practice to set the visibility of state variables explicitly. The default visibility for \"bountiesContract\" is internal. Other possible visibility values are public and private.", "forRule": "State_Variable_Default_Visibility" } ``` - `Solidity-va.codelens.enable` ... enable/disable codelens support (inline code actions) - `solidity-va.preview.dot` ... open dot output in graphviz rendered form - `solidity-va.preview.markdown` ... open markdown output in rendered form - `Solidity-va.tools.surya.input.contracts` ... Define whether surya should take cached files or all contracts in the workspace as input Please refer to the extension's contribution section to show an up-to-date list of settings.

FAQ

Known Issues

Acknowledgements

Release Notes

Changelog