MythXJS

MythXJS is a JavaScript library for interacting with the MythX API.

Installation

MythXJS can be installed via npm:

npm install mythxjs

Examples

Creating a new instance of the library using ES6 modules

import { Client } from 'mythxjs'

const mythx = new Client('0x0000000000000000000000000000000000000000', 'trial', 'testTool');

Performing a login request

// Logs in and returns an object containing access and refresh token
const tokens = await mythx.login()

Submitting an analysis using bytecode only

const bytecode = '0xfe'
await mythx.submitBytecode(bytecode)

Getting a list of detected issues

await mythx.getDetectedIssues('1111-2222-3333-4444')

Logging in with MetaMask

In order to keep MythXJS as lean as possible it does not handle MetaMask integration directly. Instead it provides two methods:

  • getChallenge()
  • loginWithSignature()

With these methods, you can handle the MetaMask integration as you prefer. You can also work with your preferred version of web3.

Here is an example using React and web3@1.0.0-beta.37:

const handleSignMessage = (account, data) => {
    try {
        return new Promise((resolve) => {
            const {value} = data.message
            if (!account) {
              console.error('no-account')
            }
              const params = [account, JSON.stringify(data)]
              web3.currentProvider.send(
                        { method: 'eth_signTypedData_v3', params, from: account },
                        (err, result) => {
                          if (err || result.error) {
                            console.error('Error with handling signature.', err)
                          }
                          resolve(value + '.' + result.result)
                        }
                    )
            }).catch((error) => {
              console.error(error)
            })
    } catch(err) {
        console.error(err)
    }
}

const loginWithMM = async () => {
    const accounts = await web3.eth.getAccounts();
    const account = accounts[0]

    const data = await mythx.getChallenge(account.toLowerCase())

    handleSignMessage(account, data).then(
        async (message) => {
            // Returns set of tokens
            const result = await mythx.loginWithSignature(message)
            console.log(result, 'ress')
        }
    ).catch(err => console.error(err))
}