Quick Overview

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 consist of operations that acheive a 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 cloned to create a new instance of the protocol or smart contract. Packages with live network deployments can be pulled, allowing protocols to connect with existing deployments.

Cannon is useful across the entire protocol development lifecycle:

Protocol Development

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.

Client 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.

Automated Testing

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.

Deployment, Configuration, and Upgrades

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.

Supported byOptimismandSafe