Cannon is a DevOps tool for protocols on Ethereum. It manages protocol and smart contract deployments for local development and live networks.
Drawing inspiration from Infrastructure as Code tools like Terraform and CloudFormation, Cannon replaces deploy scripts with Cannonfiles.
Cannonfiles describe the desired state of a blockchain (rather than a list of transactions to execute). For example, you may want a chain to have particular smart contracts and protocols deployed with certain functions called on them.
Then you can build the chain into this state using the command-line interface or the deployer. This generates a package with information related to the deployment. Packages can be published to the registry.
Packages enable composability in Cannonfiles. If a package includes a ”Cannon” deployment, it can be provisioned to create a new instance of the protocol or smart contract. Packages with live network deployments can be imported, allowing protocols to connect with existing deployments.
Cannon is useful across the entire protocol development lifecycle:
Developers can specify a chain state like ordering a sandwich. The ingredients of a cannonfile may include existing protocols, dynamic function calls, and the smart contracts under development.
The CLI runs cannonfiles locally. Protocol engineers can publish development versions of their protocols, allowing for parallel, iterative development of off-chain integrations like user interfaces and bots.
Packages can be tested prior to deployment to ensure implementations are robust. Continuous integration pipelines can integrate with Cannon to create and maintain sophisticated end-to-end testing scenarios.
When protocols are ready for deployment, the same cannonfiles used during development can be built on live networks. Cannon also enables a GitOps workflow for managing configurable/upgradable protocols.