Coverage Report
Statements | Functions | Lines |
---|---|---|
Prerequisites
- Docker
PATH+=":./bin" # use your sh files (which are located in bin/) directly from the root of the project
./build.sh # install solc and other tools in the docker image
yarn install # install deps
Don't forget to copy the .env.example file to a file named .env, and then edit it to fill in the details.
Running all the tests
yarn run test
yarn run test:trace # shows logs + calls
yarn run test:fresh # force compile and then run tests
yarn run test:coverage # run tests with coverage reports
Formatters & Linters
You can use the below packages,
- Solhint
- ESLint
- Prettier
- CSpell
- ShellCheck
yarn run format
yarn run lint
Analyzers
You can use the below tools,
- Slither
- Mythril
yarn run analyze:static path/to/contract
yarn run analyze:security path/to/contract
yarn run analyze:all path/to/contract
Deploy Contract & Verification
To try out Etherscan verification, you first need to deploy a contract to an Ethereum network that's supported by Etherscan, such as Ropsten.
In this project, copy the .env.example file to a file named .env, and then edit it to fill in the details.
- Enter your Etherscan API key
- Ropsten node URL (eg from Alchemy)
- The private key of the account which will send the deployment transaction.
With a valid .env file in place, first deploy your contract:
yarn run deploy ropsten <CONTRACT_FILE_NAME> # related to scripts/deploy/<CONTRACT_FILE_NAME>.ts
yarn run deploy:all ropsten # related to scripts/deploy.ts
Also, you can add contract(s) manually to your tenderly projects from the output.
https://dashboard.tenderly.co/contract/<NETWORK_NAME>/<CONTRACT_ADDRESS>
And then verify it:
yarn run verify ropsten <DEPLOYED_CONTRACT_ADDRESS> "<CONSTRUCTOR_ARGUMENT(S)>" # hardhat.config.ts to see all networks
Miscellaneous
yarn run generate:docs # generate docs. it checks to /contracts folder
yarn run generate:flatten path/to/contract # generate the flatten file
yarn run generate:abi path/to/contract # generate the ABI file
yarn run generate:bin path/to/contract # generate the binary in a hex
TODO
- Increase diversity in the Workshop Contract
- Add npm scripts to linters
- Add Workshop Contract tests
- Add TSLint as a TypeScript linter
- add TypeChain to Contract variables in the TypeScript files