Canopy Logo _Official golang implementation of the Canopy Network Protocol_ [![GoDoc](https://img.shields.io/badge/godoc-reference-white.svg)](https://godoc.org/github.com/canopy-network/canopy) [![Getting Started](https://img.shields.io/badge/getting%20started-guide-white)](https://canopynetwork.org) [![Go Version](https://img.shields.io/badge/golang-v1.21-white.svg)](https://golang.org) [![Next.js Version](https://img.shields.io/badge/next%20js-v14.2.3-white.svg)](https://nextjs.org/) # Overview [![License](https://img.shields.io/badge/License-MIT-white.svg)](https://opensource.org/licenses/MIT) [![Testing](https://img.shields.io/badge/testing-docker%20compose-white)](https://docs.docker.com/compose/) [![Platform](https://img.shields.io/badge/platform-linux%20%7C%20macos-white.svg)](https://github.com/canopy-network/canopy/releases) [![Status](https://img.shields.io/badge/status-alphanet-white)](https://docs.docker.com/compose/) ### ⫸ **Welcome to the Network that Powers the Peer-to-Peer Launchpad for New Chains** Built on a recursive architecture, chains bootstrap each other into independence — forming an `unstoppable` web of utility and security. **Here you'll find:** ➪ A recursive framework to build blockchains. ➪ The seed chain that started the recursive cycle. For more information on the Canopy Network Protocol visit [https://canopynetwork.org](https://canopynetwork.org) ## Standard ➪ Canopy is an Ethereum-RPC compatible L1 for native transfers, so it can plug into existing Ethereum exchange, wallet, and indexer tooling, including MetaMask. Use the `/v1/eth` endpoint as a custom Ethereum RPC and review the compatibility notes in the [eth-spec](./fsm/ethereum.md) ## RPC ➪ [Full RPC Specification](./cmd/rpc/README.md) ## Protocol Documentation ➪ Check out the Canopy Network wiki: [https://canopy-network.gitbook.io/docs](https://canopy-network.gitbook.io/docs) ## Repository Documentation Welcome to the Canopy Network reference implementation. This repository can be well understood reading about the core modules: - [Controller](controller/README.md): Coordinates communication between all the major parts of the Canopy blockchain, like a central hub or "bus" that connects the system together. - [Finite State Machine (FSM)](fsm/README.md): Defines the logic for how transactions change the blockchain's state — it decides what’s valid and how state transitions happen from one block to the next. - [Byzantine Fault Tolerant (BFT) Consensus](bft/README.md): A consensus mechanism that allows the network to agree on new blocks even if some nodes are unreliable or malicious. - [Peer-to-Peer Networking](p2p/README.md): A secure and encrypted communication system that lets nodes talk directly to each other without needing a central server. - [Persistence](store/README.md): Manages the blockchain’s storage — it saves the current state (ledger), indexes past transactions, and ensures fast and reliable data verification. ## How to Run It ➪ To run the Canopy binary, use the following commands: ```bash make build/canopy-full canopy start ``` ## How to Run It with 🐳 Docker ➪ To run a Canopy `Localnet` in a *containerized* environment, use the following commands: ```bash make docker/build make docker/up-fast make docker/logs or simply make docker/up && make docker/logs ``` ## Running Tests ➪ To run Canopy unit tests, use the Go testing tools: ```bash make test ``` ## How to Contribute ➪ Canopy is an open-source project, and we welcome contributions from the community. Here's how to get involved: 1. **Fork** the repository and clone it locally. 2. **Code** your improvements or fixes. 3. **Submit a Pull Request** (PR) for review. ➣ Please follow these [guidelines](CONTRIBUTING.md) to maintain high-quality contributions: ### High Impact or Architectural Changes ➪ Before making large changes, discuss them with the Canopy team on [Discord](https://discord.gg/pNcSJj7Wdh) to ensure alignment. ### Coding Style - Code must adhere to official Go formatting (use [`gofmt`](https://golang.org/cmd/gofmt)). - (Optional) Use [EditorConfig](https://editorconfig.org) for consistent formatting. - All code should follow Go documentation/commentary guidelines. - PRs should be opened against the `development` branch. [![Pre-Release](https://img.shields.io/github/release-pre/canopy-network/canopy.svg)](https://github.com/canopy-network/canopy/releases) [![Contributors](https://img.shields.io/github/contributors/canopy-network/canopy.svg)](https://github.com/canopy-network/canopy/pulse) [![Last Commit](https://img.shields.io/github/last-commit/canopy-network/canopy.svg)](https://github.com/canopy-network/canopy/pulse) ## Contact [![Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://x.com/CNPYNetwork) [![Discord](https://img.shields.io/badge/discord-online-blue.svg)](https://discord.gg/pNcSJj7Wdh)