The home for Hyperlane core contracts, sdk packages, and other infrastructure
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
hyperlane-monorepo/rust
Trevor Porter b96880c40d
Correct span name (#1303)
2 years ago
..
.vscode [Chore] Fix VSCode formatting and prettier precommit (#501) 3 years ago
abacus-base Proper RPC Useage fix (#1282) 2 years ago
abacus-core Proper RPC Useage fix (#1282) 2 years ago
abacus-test Proper RPC Useage fix (#1282) 2 years ago
agents Correct span name (#1303) 2 years ago
chains Mattie/update retrying provider (#1294) 2 years ago
config Message Explorer Inbox Scraping (#1159) 2 years ago
ethers-prometheus Record log request metrics (#1278) 2 years ago
gelato Gelato error information (#1199) 2 years ago
helm Message Explorer Inbox Scraping (#1159) 2 years ago
utils Message explorer cleanup (#1251) 2 years ago
.dockerignore Add rust .dockerignore (#14) 3 years ago
.gitignore Restore reverted PR to .gitignore run-locally-induced diffs. (#746) 2 years ago
Cargo.lock Proper RPC Useage fix (#1282) 2 years ago
Cargo.toml Message Explorer Inbox Scraping (#1159) 2 years ago
Dockerfile Message explorer cleanup (#1251) 2 years ago
README.md Message explorer cleanup (#1251) 2 years ago
build.sh Testnet2 agent deployment (#568) 3 years ago

README.md

Hyperlane Rust implementations

Setup

Note: You should be running >= version 1.65.0 of the rustc compiler, you can see that version with this command and should see similar output:

$ rustup --version
rustup 1.25.1 (bb60b1e89 2022-07-12)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.65.0 (897e37553 2022-11-02)`

Useful cargo commands

  • cargo doc --open
    • generate documentation and open it in a web browser
  • cargo build
    • compile the project
  • cargo run --example example
    • run the default executable for the current project
  • cargo test
    • run the tests

Useful cargo extensions

  • tree
    • show the dependency tree. Allows searching for specific packages
    • install: cargo install cargo-tree
    • invoke: cargo tree
  • clippy
    • search the codebase for a large number of lints and bad patterns
    • install: rustup component add clippy
    • invoke: cargo clippy
  • expand
    • expand macros and procedural macros. Show the code generated by the preprocessor
    • useful for debugging #[macros] and macros!()
    • install: cargo install cargo-expand
    • invoke cargo expand path::to::module

Architecture

The on-chain portions of Hyperlane are written in Solidity. The rust portions are exclusively off-chain. Later, there may be on-chain rust for Near/Solana/ Polkadot.

Hyperlane will be managed by a number of small off-chain programs ("agents"). Each of these will have a specific role. We want these roles to be simple, and easily described. Each of these agents will connect to a home chain and any number of replicas. They need to be configured with chain connection details and have access to a reliable node for each chain.

For Ethereum and Celo connections we use ethers-rs. Please see the docs here.

We use the tokio async runtime environment. Please see the docs here.

Repo layout

  • abacus-base
    • lowest dependency abacus utilities
    • contains shared utilities for building off-chain agents
    • this includes
      • trait implementations for different chains
      • shared configuration file formats
      • basic setup for an off-chain agent
  • abacus-core
    • depends on abacus-base
    • contains implementations of core primitives
    • this includes
      • traits (interfaces) for the on-chain contracts
      • model implementations of the contracts in rust
      • merkle tree implementations (for provers)
  • chains/abacus-ethereum
    • depends on abacus-core (and transitively abacus-base)
    • interfaces to the ethereum contracts
  • agents
    • each of the off-chain agents implemented thus far

Running Locally

From within the hyperlane-monorepo/rust directory, run

cargo run -r -p run-locally

or (long-form)

cargo run --release --package run-locally