hyperlane-xyz / hyperlane-monorepo

The home for Hyperlane core contracts, sdk packages, and other infrastructure
https://hyperlane.xyz
Other
238 stars 265 forks source link
blockchain hyperlane interchain monorepo

Hyperlane

GitHub Actions codecov Foundry License: MIT

Versioning

Note this is the branch for Hyperlane v3.

V2 is deprecated in favor of V3. The code for V2 can be found in the v2 branch. For V1 code, refer to the v1 branch.

Overview

Hyperlane is an interchain messaging protocol that allows applications to communicate between blockchains.

Developers can use Hyperlane to share state between blockchains, allowing them to build interchain applications that live natively across multiple chains.

To read more about interchain applications, how the protocol works, and how to integrate with Hyperlane, please see the documentation.

Working on Hyperlane

Foundry

First ensure you have Foundry installed on your machine.

Run the following to install foundryup:

curl -L https://foundry.paradigm.xyz | bash

Then run foundryup to install forge, cast, anvil and chisel.

foundryup

Check out the Foundry Book for more information.

Node

This repository targets v20 of node. We recommend using nvm to manage your node version.

To install nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

To install version 20

nvm install 20
nvm use 20

You should change versions automatically with the .nvmrc file.

Workspaces

This monorepo uses Yarn Workspaces. Installing dependencies, building, testing, and running prettier for all packages can be done from the root directory of the repository.

If you are using VSCode, you can launch the multi-root workspace with code mono.code-workspace, install the recommended workspace extensions, and use the editor settings.

Logging

The typescript tooling uses Pino based logging, which outputs structured JSON logs by default. The verbosity level and style can be configured with environment variables:

LOG_LEVEL=DEBUG|INFO|WARN|ERROR|OFF
LOG_FORMAT=PRETTY|JSON

Rust

See rust/README.md

Release Agents

Releasing packages to NPM

We use changesets to release to NPM. You can use the release script in package.json to publish.

For an alpha or beta version, follow the directions here.