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/Cargo.toml

279 lines
8.0 KiB

[workspace]
members = [
"agents/relayer",
"agents/scraper",
"agents/validator",
"chains/hyperlane-ethereum",
"chains/hyperlane-fuel",
"chains/hyperlane-sealevel",
"ethers-prometheus",
"hyperlane-base",
"hyperlane-core",
"hyperlane-test",
"sealevel/client",
"sealevel/libraries/access-control",
"sealevel/libraries/account-utils",
"sealevel/libraries/ecdsa-signature",
"sealevel/libraries/hyperlane-sealevel-connection-client",
"sealevel/libraries/hyperlane-sealevel-token",
"sealevel/libraries/interchain-security-module-interface",
"sealevel/libraries/message-recipient-interface",
"sealevel/libraries/multisig-ism",
"sealevel/libraries/serializable-account-meta",
"sealevel/libraries/test-transaction-utils",
"sealevel/libraries/test-utils",
Helloworld program and tooling (#2744) ### Description * HelloWorld program added to `rust/sealevel/programs/helloworld` * Some changes to the Sealevel tooling * Refactored the old warp-route-specific deploy management into a more generic framework for idempotently deploying and managing router apps in Sealevel * Added helloworld deploy tooling * Added ISM & owner checking to this router deployment tooling * Added `--require-tx-approval` to prevent txs from being called without first prompting * Added a bunch of new commands for creating txs with certain instructions that were needed along the way -- e.g. setting an ISM, deploying a specific multisig ISM (previously only one would be deployed as a part of `core deploy` * Added a command for configuring multisig ISMs, `multisig-ism-message-id configure`, that takes in a JSON file of multisig ISM configs and applies them onchain * A bit of cleanup / refactor - e.g. removed some old commands like `mailbox receive` * Added foreignDeployments into `RouterApp` * Because RouterApp takes in `contractsMap: HyperlaneContractsMap<Factories>,`, which require attached contracts, a new `readonly foreignDeployments: ChainMap<Address> = {},` is added to the constructor * These foreignDeployments are considered in the return value of `remoteChains(chainName: string)`, but not in `chains()` -- this means that `chains()` now concretely means "chains that can be deployed to / interacted with and that there is an entry in `contractsMap` for, and `remoteChains(chainName: string)` returns any and all remote chains, regardless of whether they can be deployed to / interacted with * Added complete ISM support to the HyperlaneRouterChecker * when checking the ISM, if there's not a match and the ISM is a config, then the ISM will be deployed * Also added RouterViolation, before it'd just throw if there was a violation * Updated the Helloworld, IGP, and core tooling to work when AEE deployments are also configured * Moved to Routing ISM -> Aggregation ISM -> Merkle / Message ID multisig setup Some things to note: * atm there are a few places that have a TODO saying to remove something after some multisig txs are executed, I plan to revisit these after we get some sigs * I've deployed the mainnet sealevel version of helloworld, but haven't been able to enroll it in the EVM chains yet. Waiting for some multisig activity here ### Drive-by changes ### Related issues #2502 ### Backward compatibility I believe it should all be backward compatible ### Testing Deployed, ran checkers, etc
1 year ago
"sealevel/programs/helloworld",
"sealevel/programs/hyperlane-sealevel-token",
"sealevel/programs/hyperlane-sealevel-token-collateral",
"sealevel/programs/hyperlane-sealevel-token-native",
"sealevel/programs/hyperlane-sealevel-igp",
"sealevel/programs/hyperlane-sealevel-igp-test",
"sealevel/programs/ism/multisig-ism-message-id",
"sealevel/programs/ism/test-ism",
"sealevel/programs/mailbox",
"sealevel/programs/mailbox-test",
"sealevel/programs/test-send-receiver",
"sealevel/programs/validator-announce",
"utils/abigen",
"utils/backtrace-oneline",
Message Explorer Inbox Scraping (#1159) * Better hex processing * Cleanup clippy errors * Fix parsing of 160 bit values * Support multiple contracts with cursors * InboxIndexer for getting message processed events * Work on inbox indexing and delivered message linking * Use message hashes to link deliveries and also add hash indexes for common lookups * split up settings struct * Support scraper config for main fn * Multiple config parsing for scraper * Better docs and more reliant config loading * Refactoring building of contract items * Cut down on duplication * Support inbox indexer building * fmt * Scraper settings loading re-work * Fix errors, warnings, and cleanup * Fix clippy warnings * Fix hash index not supporting uniqueness * Fix after entity update * Remove special case * Better error messages for missing config values * Env prefix filtering * Improve error context for url without base error * Fix inbox domain bug * Actually I was wrong about domains, misinterpreted config * Fix loading settings method * Fix upsert error * Debugged and fixed incorrect txn linking with messages and deliveries * Cleanup * Update config for scraper * Update config for scraper * Delivered message linking; again. * Reduce call frequency of message linking query * Fixed typo * Fix init mistake * changed to agent_prefix * Domain settings * Use a loop * Add more docs * Remove semicolen * Increase linking frequency * Add moonbeam domain * Fmt * Renamed settings struct * Add docs * Add test for FROM_HEX_CHARS array
2 years ago
"utils/hex",
"utils/run-locally",
]
[workspace.package]
documentation = "https://docs.hyperlane.xyz"
edition = "2021"
homepage = "https://hyperlane.xyz"
license-file = "../LICENSE.md"
publish = false
version = "0.1.0"
[workspace.dependencies]
Inflector = "0.11.4"
anyhow = "1.0"
async-trait = "0.1"
auto_impl = "1.0"
backtrace = "0.3"
base64 = "0.21.2"
bincode = "1.3"
borsh = "0.9" # 0.9 is needed for solana 1.14
bs58 = "0.5.0"
bytes = "1"
clap = "4"
color-eyre = "0.6"
config = "0.13.3"
convert_case = "0.6"
crunchy = "0.2"
ctrlc = "3.2"
curve25519-dalek = { version = "~3.2", features = ["serde"] }
derive-new = "0.5"
derive_builder = "0.12"
Make merkle proofs optional on multisig ISM (#2173) ### Description Validators currently sign `(root, index)` checkpoints and during verification, a `message` is passed as calldata, an `id()` is derived, and a `proof` of `id()` at `index` in `root` is verified This provides “all or nothing” censorship resistance guarantees because a validator can only sign roots to allow any contained messages to be processed. We have considered alternatives where validators sign `message` directly and we lose censorship resistance in exchange for eliminating merkle proof verification gas costs. However, if validators sign `(root, index, message)` tuples, we can skip merkle proof verification on the destination chain while still maintaining censorship resistance by providing two valid metadata formats: 1. existing validator signatures and merkle proof verification of inclusion 2. including merkle proof verification for pathway where validators are censoring `message` It’s worth noting the validator is required to index event data to produce this new signature format. However, this does not require historical indexing and new validators being spun up can simply begin indexing from tip. See https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2187 for validator changes See https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2248 for relayer and e2e test changes ### Drive-by changes Merkle index also optional ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2192 ### Backward compatibility - new ISM deployment is necessary (we could upgrade implementation in theory) - Validator and relayer upgrades ### Testing Unit (fuzz) Tests, E2E tests
2 years ago
derive_more = "0.99"
ed25519-dalek = "~1.0"
enum_dispatch = "0.3"
eyre = "0.6"
fixed-hash = "0.8.0"
fuels = "0.38"
fuels-code-gen = "0.38"
futures = "0.3"
futures-util = "0.3"
generic-array = { version = "1.0", features = ["serde", "more_lengths"] }
getrandom = { version = "0.2", features = ["js"] } # Required for WASM support https://docs.rs/getrandom/latest/getrandom/#webassembly-support
hex = "0.4"
itertools = "0.11.0"
jsonrpc-core = "18.0"
log = "0.4"
macro_rules_attribute = "0.2"
maplit = "1.0"
mockall = "0.11"
nix = { version = "0.27", default-features = false }
num = "0.4"
num-bigint = "0.4"
num-derive = "0.4.0"
num-traits = "0.2"
parking_lot = "0.12"
paste = "1.0"
pretty_env_logger = "0.5.0"
primitive-types = "=0.12.1"
prometheus = "0.13"
regex = "1.5"
reqwest = "0.11"
rlp = "=0.5.2"
rocksdb = "0.21.0"
sea-orm = { version = "0.12.3", features = ["sqlx-postgres", "runtime-tokio-native-tls", "with-bigdecimal", "with-time", "macros"] }
sea-orm-migration = { version = "0.12.3", features = ["sqlx-postgres", "runtime-tokio-native-tls"] }
semver = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde_bytes = "0.11"
serde_derive = "1.0"
serde_json = "1.0"
sha2 = "0.10"
sha3 = "0.10"
solana-account-decoder = "=1.14.13"
solana-banks-client = "=1.14.13"
solana-banks-interface = "=1.14.13"
solana-banks-server = "=1.14.13"
solana-clap-utils = "=1.14.13"
solana-cli-config = "=1.14.13"
solana-client = "=1.14.13"
solana-program = "=1.14.13"
solana-program-test = "=1.14.13"
solana-sdk = "=1.14.13"
solana-transaction-status = "=1.14.13"
solana-zk-token-sdk = "=1.14.13"
spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] }
spl-noop = { version = "=0.1.3", features = ["no-entrypoint"] }
spl-token = { version = "=3.5.0", features = ["no-entrypoint"] }
spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] }
spl-type-length-value = "=0.1.0"
Better Agent Configuration Parsing (#2070) ### Description This is a significant change to how we parse user configs. The main goal of this PR is to give a clear path and env key to any errors that are encountered when parsing configuration. In order to accomplish this, I have crated a new trait `FromRawConf` which defines a set of steps to validate and convert individual fields. Also for every major config struct, there is now a `Raw*` variant of it which is used by the `config` library to reduce errors that occur during deserialization itself. `Raw*` types should always use the most basic form of a value, such as `String`, `StrOrInt`, `bool`, and ideally optional in all cases. Missing values should be handled during the raw conversion and not by `config`. I also needed to make changes to a number of types stored in the parsed config types to force validation forward to the parsing step instead of doing it when we read the config value. This also required me to create a filter to prevent trying to validate certain configs that we would not ever need to load. These changes can also be built on later to support something other than `config` if we choose to, or add support for merging configs from multiple sources since everything is optional. ### Drive-by changes - Default to `http` for connection type - Default to no gas payment enforcement if not specified instead of failing - `ChainSetup` -> `ChainConf` - `GasPaymentEnforcementConfig` -> `GasPaymentEnforcementConf` - Made ethereum connection configuration more forgiving - Moved hyperlane base settings from `mod.rs` to `base.rs` - Moved config chain tests in hyperlane core to `tests` dir to fix a cyclical import problem - Extension traits to help with config in hyperlane core - Moved `StrOrInt` to new hyperlane core `config` module - Support for parsing `U256` from `StrOrInt` - Removed `HexString` type which is now redundant - Updated base settings to use hyperlane domain - Use `heyKey` as signer type if `type` is not specified and `key` is - Moved hyperlane ethereum chain config to a new module ### Related issues - Fixes #2033 - Fixes #2012 ### Backward compatibility _Are these changes backward compatible?_ Yes - This should take in configs in the same shape but be more forgiving in a few places _Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling?_ None ### Testing _What kind of testing have these changes undergone?_ Manual Unit Test
2 years ago
static_assertions = "1.1"
strum = "0.25.0"
strum_macros = "0.25.2"
tempfile = "3.3"
thiserror = "1.0"
time = "0.3"
tiny-keccak = "2.0.2"
tokio = { version = "1", features = ["parking_lot"] }
tokio-test = "0.4"
tracing = { version = "0.1", features = ["release_max_level_debug"] }
tracing-error = "0.2"
tracing-futures = "0.2"
tracing-subscriber = { version = "0.3", default-features = false }
uint = "0.9.5"
ureq = { version = "2.4", default-features = false }
Better Agent Configuration Parsing (#2070) ### Description This is a significant change to how we parse user configs. The main goal of this PR is to give a clear path and env key to any errors that are encountered when parsing configuration. In order to accomplish this, I have crated a new trait `FromRawConf` which defines a set of steps to validate and convert individual fields. Also for every major config struct, there is now a `Raw*` variant of it which is used by the `config` library to reduce errors that occur during deserialization itself. `Raw*` types should always use the most basic form of a value, such as `String`, `StrOrInt`, `bool`, and ideally optional in all cases. Missing values should be handled during the raw conversion and not by `config`. I also needed to make changes to a number of types stored in the parsed config types to force validation forward to the parsing step instead of doing it when we read the config value. This also required me to create a filter to prevent trying to validate certain configs that we would not ever need to load. These changes can also be built on later to support something other than `config` if we choose to, or add support for merging configs from multiple sources since everything is optional. ### Drive-by changes - Default to `http` for connection type - Default to no gas payment enforcement if not specified instead of failing - `ChainSetup` -> `ChainConf` - `GasPaymentEnforcementConfig` -> `GasPaymentEnforcementConf` - Made ethereum connection configuration more forgiving - Moved hyperlane base settings from `mod.rs` to `base.rs` - Moved config chain tests in hyperlane core to `tests` dir to fix a cyclical import problem - Extension traits to help with config in hyperlane core - Moved `StrOrInt` to new hyperlane core `config` module - Support for parsing `U256` from `StrOrInt` - Removed `HexString` type which is now redundant - Updated base settings to use hyperlane domain - Use `heyKey` as signer type if `type` is not specified and `key` is - Moved hyperlane ethereum chain config to a new module ### Related issues - Fixes #2033 - Fixes #2012 ### Backward compatibility _Are these changes backward compatible?_ Yes - This should take in configs in the same shape but be more forgiving in a few places _Are there any infrastructure implications, e.g. changes that would prohibit deploying older commits using this infra tooling?_ None ### Testing _What kind of testing have these changes undergone?_ Manual Unit Test
2 years ago
url = "2.3"
walkdir = "2"
warp = "0.3"
which = "4.3"
[workspace.dependencies.ethers]
git = "https://github.com/hyperlane-xyz/ethers-rs"
tag = "2023-06-01"
features = []
[workspace.dependencies.ethers-contract]
git = "https://github.com/hyperlane-xyz/ethers-rs"
tag = "2023-06-01"
features = ["legacy"]
[workspace.dependencies.ethers-core]
git = "https://github.com/hyperlane-xyz/ethers-rs"
tag = "2023-06-01"
features = []
[workspace.dependencies.ethers-providers]
git = "https://github.com/hyperlane-xyz/ethers-rs"
tag = "2023-06-01"
features = []
[workspace.dependencies.ethers-signers]
git = "https://github.com/hyperlane-xyz/ethers-rs"
tag = "2023-06-01"
features = ["aws"]
[patch.crates-io.curve25519-dalek]
version = "3.2.2"
git = "https://github.com/Eclipse-Laboratories-Inc/curve25519-dalek"
branch = "v3.2.2-relax-zeroize"
[patch.crates-io.ed25519-dalek]
version = "1.0.1"
git = "https://github.com/Eclipse-Laboratories-Inc/ed25519-dalek"
branch = "main"
[patch.crates-io.primitive-types]
version = "=0.12.1"
git = "https://github.com/hyperlane-xyz/parity-common.git"
branch = "hyperlane"
[patch.crates-io.rlp]
version = "=0.5.2"
git = "https://github.com/hyperlane-xyz/parity-common.git"
branch = "hyperlane"
[patch.crates-io.solana-account-decoder]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-banks-client]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-banks-interface]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-banks-server]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-clap-utils]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-cli-config]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-client]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-program]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-program-test]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-sdk]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-transaction-status]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.solana-zk-token-sdk]
version = "=1.14.13"
git = "https://github.com/hyperlane-xyz/solana.git"
tag = "hyperlane-1.14.13-2023-07-04"
[patch.crates-io.spl-associated-token-account]
version = "=1.1.2"
git = "https://github.com/hyperlane-xyz/solana-program-library.git"
branch = "hyperlane"
[patch.crates-io.spl-noop]
version = "=0.1.3"
git = "https://github.com/hyperlane-xyz/solana-program-library.git"
branch = "hyperlane"
[patch.crates-io.spl-token]
version = "=3.5.0"
git = "https://github.com/hyperlane-xyz/solana-program-library.git"
branch = "hyperlane"
[patch.crates-io.spl-token-2022]
version = "=0.5.0"
git = "https://github.com/hyperlane-xyz/solana-program-library.git"
branch = "hyperlane"
[patch.crates-io.spl-type-length-value]
version = "=0.1.0"
git = "https://github.com/hyperlane-xyz/solana-program-library.git"
branch = "hyperlane"