We have many fragmented tools. These include
However, it is not clear to someone coming onto ICON what they need to do to get started, or which tools to use. Many of these tools assume a level of familiarity with Java and ICON that is greater than what we should assume an onboarding developer would have. Additionally, some have either incomplete or incorrect documentation that cause frustrating experiences building on ICON.
I would like to see a single tool to improve the smart contract developer experience that contains the following:
- In-process or standalone local goloop node that includes account and state management. This is similar to Ganache and the Hardhat Network
- Standardized deployment process with a single command to build, test, and deploy smart contracts
- Standardized project initialization that minimizes startup steps to a single init command and bootstraps development
- Standardized development environment across multiple platforms (Linux, Apple Sillicon)
- Standardized testing framework that integrates JUnit 5 and Mockito, and includes the ability to get stack traces for failed transactions
- CLI to communicate with accounts and smart contracts
- Documented in such a way that assumes no prior Java knowledge
- Requires minimal effort by the developer to set up
I believe this tool would best be a Gradle plugin. Gradle wrapper itself does not need to be abstracted, it just needs to be documented how to use for someone new to Java and ICON. I would additionally like to see an IntelliJ and VSCode plugin that integrates the tool directly to the IDE along with JCL whitelist and ABI type checking. As the initial scope, I believe this would primarily involve tying pre-existing work together, and a single developer familiar with Java and smart contract development could do so in a few months.
This Gradle and IDE tool could later be extended to include the following:
- Linter
- Static vulnerability analyzer
- Runtime vulnerability analyzer
- Formal verification support for OpenJML