Challenge Overview

Maru is a prototype of a lightweight, fast and extensible static code analyser for Ethereum smart contracts. In this challenge, you will add unit tests to the provided code, and take care about various auxiliary tasks.

Technology Stack

Maru is a NodeJS (JavaScript) command-line tool. Mocha is used as the test framework.

Code Access

The codebase is proprietary, and must not be shared nor used beyond the scope of this challenge, as per the standard Topcoder Terms of Use. In the challenge forum you will find a ZIP archive with the current snapshot of the codebase Git repository. You will work out of the commit 5cc48f1e5d7f9a40e1b9d92183247bc5f3182cd2.

Individual Requirements

All requirements are considered major.

  1. Integrate Omnibus as GitHub submodule. Parse, and write tests for the OutdatedCompilerVersion and LockPragma Maruplugins to verify that they find issues at specified linenumbers.

  2. Add other unit tests for all Maroo plugins to ensure that test coverage of each plugin is above 90%.

  3. Add maru --version (and shortcut maroo -v) commands to print Maru version into console. Version number is taken from package.json.

  4. Create CircleCI configuration that executes tests on any branch or tag commit, and automatically release the tool to NPM on tagged commits with tags of form v0.1.2. Refer to this CircleCI config as the example.

    NOTE: As the codebase is proprietary, you MUST NOT test CircleCI configuration with a public Git repository! As provided example CircleCI config only requires small tuning, it should not be a problem. You may use CircleCI CLI for local testing of configuration.

  5. Create a build script that allows to install development and production builds. The development version builds from source. The production version uses the latest version in node_modules.

  6. Write with the following content:
    - Brief description of the tool purpose, architecture and usage
    - Information for developers (how to run tests, what CircleCI setup does currently, which environment variables should be set in CircleCI to configure NPM releases, how to release a new tool version to NPM (do not forget to mention usage of $ npm version command for bumping package versions before releases)).

In case of any doubts, do not hesitate to ask questions in the challenge forum.

Final Submission Guidelines

Submit Git patch with your changes. Include any notes for reviewers into a separate verification document, though we expect that most of the information necessary for testing of your updates will be appropriate to include into


Topcoder Open 2019


Final Review:

Community Review Board


User Sign-Off


ID: 30070146