From 86dcae84680a62a5c51d95450c717e6627736a6f Mon Sep 17 00:00:00 2001 From: Richard Janis Goldschmidt Date: Wed, 6 Dec 2023 11:00:43 -0800 Subject: [PATCH] refactor: rename proto crate to core --- Cargo.lock | 70 ++++---- Cargo.toml | 2 +- crates/astria-celestia-client/Cargo.toml | 3 +- crates/astria-celestia-client/src/client.rs | 20 ++- crates/astria-celestia-client/src/lib.rs | 13 +- crates/astria-cli/Cargo.toml | 2 +- crates/astria-cli/src/commands/sequencer.rs | 14 +- crates/astria-composer/Cargo.toml | 4 +- .../astria-composer/src/searcher/collector.rs | 2 +- .../astria-composer/src/searcher/executor.rs | 16 +- crates/astria-composer/src/searcher/mod.rs | 10 +- .../tests/blackbox/composer.rs | 12 +- .../tests/blackbox/helper/mock_sequencer.rs | 4 +- crates/astria-conductor/Cargo.toml | 12 +- crates/astria-conductor/src/conductor.rs | 4 +- .../src/data_availability/block_verifier.rs | 4 +- .../src/data_availability/mod.rs | 2 +- .../astria-conductor/src/executor/client.rs | 12 +- crates/astria-conductor/src/executor/mod.rs | 16 +- crates/astria-conductor/src/executor/tests.rs | 14 +- crates/astria-conductor/src/sequencer/mod.rs | 2 +- crates/astria-config/src/lib.rs | 2 +- .../{astria-proto => astria-core}/Cargo.toml | 16 +- .../{astria-proto => astria-core}/README.md | 0 .../generated/astria.execution.v1alpha1.rs | 0 .../generated/astria.execution.v1alpha2.rs | 0 .../src}/generated/astria.primitive.v1.rs | 0 .../generated/astria.sequencer.v1alpha1.rs | 0 crates/astria-core/src/generated/mod.rs | 28 +++ .../native/mod.rs => astria-core/src/lib.rs} | 8 + .../native => astria-core/src}/primitive.rs | 0 .../src}/sequencer/asset.rs | 0 .../src}/sequencer/ics20_withdrawal.rs | 6 +- .../src}/sequencer/mod.rs | 0 .../src}/sequencer/v1alpha1/mod.rs | 20 +-- .../src}/sequencer/v1alpha1/test_utils.rs | 0 crates/astria-proto/src/lib.rs | 20 --- crates/astria-proto/src/proto/mod.rs | 31 ---- crates/astria-sequencer-client/Cargo.toml | 3 +- .../src/extension_trait.rs | 24 +-- crates/astria-sequencer-client/src/lib.rs | 2 +- .../astria-sequencer-client/src/tests/http.rs | 12 +- crates/astria-sequencer-relayer/Cargo.toml | 7 +- .../tests/blackbox/helper.rs | 2 +- crates/astria-sequencer-types/Cargo.toml | 20 +-- crates/astria-sequencer-types/src/lib.rs | 1 - .../astria-sequencer-types/src/namespace.rs | 86 --------- crates/astria-sequencer-types/src/serde.rs | 41 ----- .../astria-sequencer-types/src/test_utils.rs | 169 ++++++++++++++++++ crates/astria-sequencer/Cargo.toml | 2 +- .../astria-sequencer/src/accounts/action.rs | 2 +- .../src/accounts/ics20_transfer.rs | 8 +- .../src/accounts/ics20_withdrawal.rs | 12 +- crates/astria-sequencer/src/accounts/query.rs | 13 +- .../src/accounts/state_ext.rs | 8 +- crates/astria-sequencer/src/app.rs | 50 +++--- crates/astria-sequencer/src/asset/mod.rs | 2 +- .../astria-sequencer/src/asset/state_ext.rs | 8 +- .../astria-sequencer/src/authority/action.rs | 2 +- .../src/authority/component.rs | 2 +- .../src/authority/state_ext.rs | 8 +- crates/astria-sequencer/src/genesis.rs | 2 +- crates/astria-sequencer/src/mint/action.rs | 2 +- .../src/proposal/commitment.rs | 10 +- crates/astria-sequencer/src/sequence.rs | 2 +- .../astria-sequencer/src/service/consensus.rs | 18 +- .../astria-sequencer/src/service/info/mod.rs | 4 +- .../astria-sequencer/src/service/mempool.rs | 6 +- .../src/transaction/action_handler.rs | 8 +- .../astria-sequencer/src/transaction/mod.rs | 2 +- tools/protobuf-compiler/src/main.rs | 11 +- 71 files changed, 455 insertions(+), 463 deletions(-) rename crates/{astria-proto => astria-core}/Cargo.toml (73%) rename crates/{astria-proto => astria-core}/README.md (100%) rename crates/{astria-proto/src/proto => astria-core/src}/generated/astria.execution.v1alpha1.rs (100%) rename crates/{astria-proto/src/proto => astria-core/src}/generated/astria.execution.v1alpha2.rs (100%) rename crates/{astria-proto/src/proto => astria-core/src}/generated/astria.primitive.v1.rs (100%) rename crates/{astria-proto/src/proto => astria-core/src}/generated/astria.sequencer.v1alpha1.rs (100%) create mode 100644 crates/astria-core/src/generated/mod.rs rename crates/{astria-proto/src/native/mod.rs => astria-core/src/lib.rs} (87%) rename crates/{astria-proto/src/native => astria-core/src}/primitive.rs (100%) rename crates/{astria-proto/src/native => astria-core/src}/sequencer/asset.rs (100%) rename crates/{astria-proto/src/native => astria-core/src}/sequencer/ics20_withdrawal.rs (98%) rename crates/{astria-proto/src/native => astria-core/src}/sequencer/mod.rs (100%) rename crates/{astria-proto/src/native => astria-core/src}/sequencer/v1alpha1/mod.rs (99%) rename crates/{astria-proto/src/native => astria-core/src}/sequencer/v1alpha1/test_utils.rs (100%) delete mode 100644 crates/astria-proto/src/lib.rs delete mode 100644 crates/astria-proto/src/proto/mod.rs delete mode 100644 crates/astria-sequencer-types/src/namespace.rs delete mode 100644 crates/astria-sequencer-types/src/serde.rs create mode 100644 crates/astria-sequencer-types/src/test_utils.rs diff --git a/Cargo.lock b/Cargo.lock index effcf8b5da..643551a05a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -494,8 +494,8 @@ dependencies = [ name = "astria-celestia-client" version = "0.1.0" dependencies = [ + "astria-core", "astria-merkle", - "astria-proto", "async-trait", "base64 0.21.5", "base64-serde", @@ -503,6 +503,7 @@ dependencies = [ "celestia-types", "hex", "jsonrpsee", + "prost", "serde", "serde_json", "sha2 0.10.8", @@ -525,7 +526,7 @@ name = "astria-cli" version = "0.2.0" dependencies = [ "assert_cmd", - "astria-proto", + "astria-core", "astria-sequencer-client", "clap", "color-eyre", @@ -546,7 +547,7 @@ name = "astria-composer" version = "0.3.0" dependencies = [ "astria-config", - "astria-proto", + "astria-core", "astria-sequencer-client", "astria-sequencer-types", "astria-telemetry", @@ -563,6 +564,7 @@ dependencies = [ "hyper", "once_cell", "pin-project-lite", + "prost", "rand 0.8.5", "regex", "reqwest", @@ -587,9 +589,9 @@ version = "0.11.0" dependencies = [ "astria-celestia-client", "astria-config", + "astria-core", "astria-merkle", "astria-optimism", - "astria-proto", "astria-sequencer-client", "astria-sequencer-types", "astria-telemetry", @@ -633,27 +635,7 @@ dependencies = [ ] [[package]] -name = "astria-merkle" -version = "0.1.0" -dependencies = [ - "hex-literal", - "serde", - "sha2 0.10.8", -] - -[[package]] -name = "astria-optimism" -version = "0.1.0" -dependencies = [ - "astria-optimism", - "ethers", - "eyre", - "hex", - "tokio", -] - -[[package]] -name = "astria-proto" +name = "astria-core" version = "0.1.0" dependencies = [ "astria-merkle", @@ -666,7 +648,6 @@ dependencies = [ "prost", "prost-types", "rand 0.8.5", - "serde", "sha2 0.10.8", "tempfile", "tendermint 0.34.0", @@ -679,14 +660,34 @@ dependencies = [ "which", ] +[[package]] +name = "astria-merkle" +version = "0.1.0" +dependencies = [ + "hex-literal", + "serde", + "sha2 0.10.8", +] + +[[package]] +name = "astria-optimism" +version = "0.1.0" +dependencies = [ + "astria-optimism", + "ethers", + "eyre", + "hex", + "tokio", +] + [[package]] name = "astria-sequencer" version = "0.7.0" dependencies = [ "anyhow", "astria-config", + "astria-core", "astria-merkle", - "astria-proto", "astria-sequencer-types", "astria-telemetry", "async-trait", @@ -720,12 +721,13 @@ dependencies = [ name = "astria-sequencer-client" version = "0.1.0" dependencies = [ - "astria-proto", + "astria-core", "async-trait", "ed25519-consensus", "futures", "hex", "hex-literal", + "prost", "regex", "serde", "serde_json", @@ -745,8 +747,8 @@ dependencies = [ "astria-celestia-client", "astria-celestia-mock", "astria-config", + "astria-core", "astria-merkle", - "astria-proto", "astria-sequencer-client", "astria-telemetry", "axum", @@ -785,18 +787,12 @@ name = "astria-sequencer-types" version = "0.1.0" dependencies = [ "astria-merkle", - "astria-proto", - "base64 0.21.5", - "base64-serde", - "hex", + "ed25519-consensus", "prost", - "serde", - "serde_json", + "rand 0.8.5", "sha2 0.10.8", "tendermint 0.34.0", "tendermint-proto 0.34.0", - "thiserror", - "tracing", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 53083cf0b8..9aaf2e1a69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,9 +8,9 @@ members = [ "crates/astria-composer", "crates/astria-conductor", "crates/astria-config", + "crates/astria-core", "crates/astria-merkle", "crates/astria-optimism", - "crates/astria-proto", "crates/astria-sequencer", "crates/astria-sequencer-client", "crates/astria-sequencer-relayer", diff --git a/crates/astria-celestia-client/Cargo.toml b/crates/astria-celestia-client/Cargo.toml index a1bcfd0e5d..669c5c02b0 100644 --- a/crates/astria-celestia-client/Cargo.toml +++ b/crates/astria-celestia-client/Cargo.toml @@ -18,8 +18,8 @@ tendermint = { workspace = true } thiserror = { workspace = true } tracing = { workspace = true } +astria-core = { path = "../astria-core" } merkle = { package = "astria-merkle", path = "../astria-merkle" } -proto = { package = "astria-proto", path = "../astria-proto" } ### Celestia specific imports # @@ -28,6 +28,7 @@ proto = { package = "astria-proto", path = "../astria-proto" } # As none of them are reexported it is important to keep these in sync # when updating. jsonrpsee = { version = "0.20", features = ["client-core", "macros"] } +prost = { workspace = true } [dependencies.celestia-rpc] git = "https://github.com/eigerco/celestia-node-rs" diff --git a/crates/astria-celestia-client/src/client.rs b/crates/astria-celestia-client/src/client.rs index 67b2678692..99f9b7cf88 100644 --- a/crates/astria-celestia-client/src/client.rs +++ b/crates/astria-celestia-client/src/client.rs @@ -1,3 +1,9 @@ +use astria_core::sequencer::v1alpha1::{ + CelestiaRollupBlob, + CelestiaSequencerBlob, + CelestiaSequencerBlobError, + SequencerBlock, +}; use async_trait::async_trait; use base64::{ display::Base64Display, @@ -10,13 +16,7 @@ use celestia_types::{ Blob, Commitment, }; -use proto::{ - native::sequencer::v1alpha1::{ - CelestiaRollupBlob, - CelestiaSequencerBlob, - CelestiaSequencerBlobError, - SequencerBlock, - }, +use prost::{ DecodeError, Message as _, }; @@ -94,7 +94,7 @@ pub trait CelestiaClientExt: BlobClient { } 'blob: { let raw_blob = - match proto::generated::sequencer::v1alpha1::CelestiaSequencerBlob::decode( + match astria_core::generated::sequencer::v1alpha1::CelestiaSequencerBlob::decode( &*blob.data, ) { Ok(blob) => blob, @@ -283,7 +283,9 @@ fn convert_and_filter_rollup_blobs( continue; } let proto_blob = - match proto::generated::sequencer::v1alpha1::CelestiaRollupBlob::decode(&*blob.data) { + match astria_core::generated::sequencer::v1alpha1::CelestiaRollupBlob::decode( + &*blob.data, + ) { Err(e) => { warn!( error = &e as &dyn std::error::Error, diff --git a/crates/astria-celestia-client/src/lib.rs b/crates/astria-celestia-client/src/lib.rs index 584bae4c78..ad76d95749 100644 --- a/crates/astria-celestia-client/src/lib.rs +++ b/crates/astria-celestia-client/src/lib.rs @@ -1,5 +1,9 @@ pub mod client; +pub use astria_core::sequencer::v1alpha1::{ + CelestiaRollupBlob, + CelestiaSequencerBlob, +}; pub use celestia_rpc; pub use celestia_tendermint; pub use celestia_types; @@ -9,11 +13,6 @@ use celestia_types::nmt::{ }; pub use client::CelestiaClientExt; pub use jsonrpsee; -use proto::native::sequencer::v1alpha1::RollupId; -pub use proto::native::sequencer::v1alpha1::{ - CelestiaRollupBlob, - CelestiaSequencerBlob, -}; #[must_use = "a celestia namespace must be used in order to be useful"] pub const fn celestia_namespace_v0_from_array(bytes: [u8; N]) -> Namespace { @@ -30,7 +29,9 @@ pub const fn celestia_namespace_v0_from_array(bytes: [u8; N]) -> } #[must_use = "a celestia namespace must be used in order to be useful"] -pub const fn celestia_namespace_v0_from_rollup_id(rollup_id: RollupId) -> Namespace { +pub const fn celestia_namespace_v0_from_rollup_id( + rollup_id: astria_core::sequencer::v1alpha1::RollupId, +) -> Namespace { celestia_namespace_v0_from_array(rollup_id.get()) } diff --git a/crates/astria-cli/Cargo.toml b/crates/astria-cli/Cargo.toml index ddb06b6c23..8d4a9a4032 100644 --- a/crates/astria-cli/Cargo.toml +++ b/crates/astria-cli/Cargo.toml @@ -10,7 +10,7 @@ bench = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -proto = { package = "astria-proto", path = "../astria-proto" } +astria-core = { path = "../astria-core" } clap = { workspace = true, features = ["derive", "env"] } color-eyre = { workspace = true } diff --git a/crates/astria-cli/src/commands/sequencer.rs b/crates/astria-cli/src/commands/sequencer.rs index 5ee7ba2b7a..0b158bb2c0 100644 --- a/crates/astria-cli/src/commands/sequencer.rs +++ b/crates/astria-cli/src/commands/sequencer.rs @@ -1,3 +1,8 @@ +use astria_core::sequencer::v1alpha1::{ + Action, + TransferAction, + UnsignedTransaction, +}; use astria_sequencer_client::{ Address, HttpClient, @@ -12,11 +17,6 @@ use color_eyre::{ }, }; use ed25519_consensus::SigningKey; -use proto::native::sequencer::v1alpha1::{ - Action, - TransferAction, - UnsignedTransaction, -}; use rand::rngs::OsRng; use crate::cli::sequencer::{ @@ -178,9 +178,9 @@ pub(crate) async fn send_transfer(args: &TransferArgs) -> eyre::Result<()> { actions: vec![Action::Transfer(TransferAction { to: to_address, amount: args.amount, - asset_id: proto::native::sequencer::asset::default_native_asset_id(), + asset_id: astria_core::sequencer::asset::default_native_asset_id(), })], - fee_asset_id: proto::native::sequencer::asset::default_native_asset_id(), + fee_asset_id: astria_core::sequencer::asset::default_native_asset_id(), } .into_signed(&sequencer_key); let res = sequencer_client diff --git a/crates/astria-composer/Cargo.toml b/crates/astria-composer/Cargo.toml index 4c8f6ff3f1..0f35543f53 100644 --- a/crates/astria-composer/Cargo.toml +++ b/crates/astria-composer/Cargo.toml @@ -7,8 +7,8 @@ rust-version = "1.70.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +astria-core = { path = "../astria-core" } config = { package = "astria-config", path = "../astria-config" } -proto = { package = "astria-proto", path = "../astria-proto" } telemetry = { package = "astria-telemetry", path = "../astria-telemetry" } pin-project-lite = "0.2.13" @@ -42,6 +42,7 @@ tokio = { workspace = true, features = [ tokio-util = { workspace = true, features = ["rt"] } tracing = { workspace = true, features = ["attributes"] } tryhard = { workspace = true } +prost.workspace = true [dependencies.sequencer-client] package = "astria-sequencer-client" @@ -56,7 +57,6 @@ path = "../astria-sequencer-types" config = { package = "astria-config", path = "../astria-config", features = [ "tests", ] } -proto = { package = "astria-proto", path = "../astria-proto" } test_utils = { package = "astria-test-utils", path = "../astria-test-utils", features = [ "geth", ] } diff --git a/crates/astria-composer/src/searcher/collector.rs b/crates/astria-composer/src/searcher/collector.rs index 2237827571..18373a135b 100644 --- a/crates/astria-composer/src/searcher/collector.rs +++ b/crates/astria-composer/src/searcher/collector.rs @@ -1,3 +1,4 @@ +use astria_core::sequencer::v1alpha1::RollupId; use color_eyre::eyre::{ self, WrapErr as _, @@ -7,7 +8,6 @@ use ethers::providers::{ ProviderError, Ws, }; -use proto::native::sequencer::v1alpha1::RollupId; use tokio::sync::{ mpsc::{ error::SendTimeoutError, diff --git a/crates/astria-composer/src/searcher/executor.rs b/crates/astria-composer/src/searcher/executor.rs index f4b6338b7a..de8f85b40b 100644 --- a/crates/astria-composer/src/searcher/executor.rs +++ b/crates/astria-composer/src/searcher/executor.rs @@ -9,6 +9,12 @@ use std::{ time::Duration, }; +use astria_core::sequencer::v1alpha1::{ + asset::default_native_asset_id, + Action, + SignedTransaction, + UnsignedTransaction, +}; use color_eyre::eyre::{ self, eyre, @@ -25,15 +31,7 @@ use futures::{ Future, }; use pin_project_lite::pin_project; -use proto::{ - native::sequencer::v1alpha1::{ - asset::default_native_asset_id, - Action, - SignedTransaction, - UnsignedTransaction, - }, - Message as _, -}; +use prost::Message as _; use secrecy::{ ExposeSecret as _, SecretString, diff --git a/crates/astria-composer/src/searcher/mod.rs b/crates/astria-composer/src/searcher/mod.rs index 303a742bf3..dbc76887fd 100644 --- a/crates/astria-composer/src/searcher/mod.rs +++ b/crates/astria-composer/src/searcher/mod.rs @@ -1,13 +1,13 @@ use std::collections::HashMap; +use astria_core::sequencer::v1alpha1::{ + Action, + SequenceAction, +}; use color_eyre::eyre::{ self, WrapErr as _, }; -use proto::native::sequencer::v1alpha1::{ - Action, - SequenceAction, -}; use tokio::{ select, sync::{ @@ -367,8 +367,8 @@ fn reconnect_exited_collector( mod tests { use std::collections::HashMap; + use astria_core::sequencer::v1alpha1::RollupId; use ethers::types::Transaction; - use proto::native::sequencer::v1alpha1::RollupId; use tokio_util::task::JoinMap; use crate::searcher::collector::{ diff --git a/crates/astria-composer/tests/blackbox/composer.rs b/crates/astria-composer/tests/blackbox/composer.rs index 898657beb1..48b435c4d0 100644 --- a/crates/astria-composer/tests/blackbox/composer.rs +++ b/crates/astria-composer/tests/blackbox/composer.rs @@ -1,13 +1,13 @@ use std::time::Duration; -use ethers::types::Transaction; -use proto::{ +use astria_core::{ generated::sequencer::v1alpha1::NonceResponse, - native::sequencer::v1alpha1::{ + sequencer::v1alpha1::{ RollupId, SignedTransaction, }, }; +use ethers::types::Transaction; use sequencer_types::AbciCode; use tendermint_rpc::{ endpoint::broadcast::tx_sync, @@ -286,10 +286,8 @@ async fn mount_matcher_verifying_tx_integrity( } fn signed_tx_from_request(request: &Request) -> SignedTransaction { - use proto::{ - generated::sequencer::v1alpha1::SignedTransaction as RawSignedTransaction, - Message as _, - }; + use astria_core::generated::sequencer::v1alpha1::SignedTransaction as RawSignedTransaction; + use prost::Message as _; let wrapped_tx_sync_req: request::Wrapper = serde_json::from_slice(&request.body) diff --git a/crates/astria-composer/tests/blackbox/helper/mock_sequencer.rs b/crates/astria-composer/tests/blackbox/helper/mock_sequencer.rs index 6b92a65512..f123eea2ca 100644 --- a/crates/astria-composer/tests/blackbox/helper/mock_sequencer.rs +++ b/crates/astria-composer/tests/blackbox/helper/mock_sequencer.rs @@ -1,4 +1,4 @@ -use proto::Message; +use prost::Message; use serde_json::json; use tendermint_rpc::{ response, @@ -16,7 +16,7 @@ use wiremock::{ }; pub async fn start() -> (MockServer, MockGuard) { - use proto::generated::sequencer::v1alpha1::NonceResponse; + use astria_core::generated::sequencer::v1alpha1::NonceResponse; let server = MockServer::start().await; let startup_guard = mount_abci_query_mock( &server, diff --git a/crates/astria-conductor/Cargo.toml b/crates/astria-conductor/Cargo.toml index d6ef156809..2f65ff9740 100644 --- a/crates/astria-conductor/Cargo.toml +++ b/crates/astria-conductor/Cargo.toml @@ -33,14 +33,12 @@ tonic = { workspace = true } tracing = { workspace = true } tryhard = { workspace = true } +astria-core = { path = "../astria-core", features = ["client"] } celestia-client = { package = "astria-celestia-client", path = "../astria-celestia-client" } sequencer-types = { package = "astria-sequencer-types", path = "../astria-sequencer-types" } optimism = { package = "astria-optimism", path = "../astria-optimism" } config = { package = "astria-config", path = "../astria-config" } merkle = { package = "astria-merkle", path = "../astria-merkle" } -proto = { package = "astria-proto", path = "../astria-proto", features = [ - "client", -] } sequencer-client = { package = "astria-sequencer-client", path = "../astria-sequencer-client", features = [ "websocket", ] } @@ -49,14 +47,12 @@ telemetry = { package = "astria-telemetry", path = "../astria-telemetry" } [dev-dependencies] jsonrpsee = { workspace = true, features = ["server"] } +tokio-stream = { version = "0.1.14", features = ["net"] } + +astria-core = { path = "../astria-core", features = ["server", "test-utils"] } optimism = { package = "astria-optimism", path = "../astria-optimism", features = [ "test-utils", ] } config = { package = "astria-config", path = "../astria-config", features = [ "tests", ] } -proto = { package = "astria-proto", path = "../astria-proto", features = [ - "server", - "test-utils", -] } -tokio-stream = { version = "0.1.14", features = ["net"] } diff --git a/crates/astria-conductor/src/conductor.rs b/crates/astria-conductor/src/conductor.rs index 243f43617a..a7b0179d73 100644 --- a/crates/astria-conductor/src/conductor.rs +++ b/crates/astria-conductor/src/conductor.rs @@ -5,6 +5,7 @@ use std::{ time::Duration, }; +use astria_core::sequencer::v1alpha1::RollupId; use celestia_client::celestia_types::nmt::Namespace; use color_eyre::eyre::{ self, @@ -95,8 +96,7 @@ impl Conductor { let signals = spawn_signal_handler(); - let rollup_id = - proto::native::sequencer::v1alpha1::RollupId::from_unhashed_bytes(&cfg.chain_id); + let rollup_id = RollupId::from_unhashed_bytes(&cfg.chain_id); // Spawn the executor task. let (executor_tx, sync_start_block_height) = { diff --git a/crates/astria-conductor/src/data_availability/block_verifier.rs b/crates/astria-conductor/src/data_availability/block_verifier.rs index 057f569893..7aad1b23a3 100644 --- a/crates/astria-conductor/src/data_availability/block_verifier.rs +++ b/crates/astria-conductor/src/data_availability/block_verifier.rs @@ -280,7 +280,7 @@ mod test { str::FromStr, }; - use proto::native::sequencer::v1alpha1::{ + use astria_core::sequencer::v1alpha1::{ test_utils::make_cometbft_block, RollupId, UncheckedCelestiaSequencerBlob, @@ -391,7 +391,7 @@ mod test { let rollup_id = RollupId::from_unhashed_bytes(b"test-chain"); let grouped_txs = BTreeMap::from([(rollup_id, vec![test_tx.clone()])]); let rollup_transactions_tree = - proto::native::sequencer::v1alpha1::derive_merkle_tree_from_rollup_txs(&grouped_txs); + astria_core::sequencer::v1alpha1::derive_merkle_tree_from_rollup_txs(&grouped_txs); let rollup_transactions_root = rollup_transactions_tree.root(); let rollup_ids_root = merkle::Tree::from_leaves(std::iter::once(rollup_id)).root(); diff --git a/crates/astria-conductor/src/data_availability/mod.rs b/crates/astria-conductor/src/data_availability/mod.rs index 9a55eb0d2b..f48a0dec95 100644 --- a/crates/astria-conductor/src/data_availability/mod.rs +++ b/crates/astria-conductor/src/data_availability/mod.rs @@ -1,5 +1,6 @@ use std::time::Duration; +use astria_core::sequencer::v1alpha1::RollupId; use celestia_client::{ celestia_types::{ nmt::Namespace, @@ -14,7 +15,6 @@ use color_eyre::eyre::{ bail, WrapErr as _, }; -use proto::native::sequencer::v1alpha1::RollupId; use sequencer_client::SequencerBlock; use tendermint::{ block::Header, diff --git a/crates/astria-conductor/src/executor/client.rs b/crates/astria-conductor/src/executor/client.rs index ac8ccf9cd1..66df6ea335 100644 --- a/crates/astria-conductor/src/executor/client.rs +++ b/crates/astria-conductor/src/executor/client.rs @@ -1,9 +1,4 @@ -use color_eyre::eyre::{ - Result, - WrapErr, -}; -use prost_types::Timestamp; -use proto::generated::execution::v1alpha2::{ +use astria_core::generated::execution::v1alpha2::{ execution_service_client::ExecutionServiceClient, BatchGetBlocksRequest, BatchGetBlocksResponse, @@ -15,6 +10,11 @@ use proto::generated::execution::v1alpha2::{ GetCommitmentStateRequest, UpdateCommitmentStateRequest, }; +use color_eyre::eyre::{ + Result, + WrapErr, +}; +use prost_types::Timestamp; use tonic::transport::Channel; use super::ExecutorCommitmentState; diff --git a/crates/astria-conductor/src/executor/mod.rs b/crates/astria-conductor/src/executor/mod.rs index 104988ab46..98ff0abbf3 100644 --- a/crates/astria-conductor/src/executor/mod.rs +++ b/crates/astria-conductor/src/executor/mod.rs @@ -1,5 +1,13 @@ use std::collections::HashMap; +use astria_core::{ + generated::execution::v1alpha2::{ + execution_service_client::ExecutionServiceClient, + Block, + CommitmentState, + }, + sequencer::v1alpha1::RollupId, +}; use color_eyre::eyre::{ self, bail, @@ -8,14 +16,6 @@ use color_eyre::eyre::{ WrapErr as _, }; use prost_types::Timestamp as ProstTimestamp; -use proto::{ - generated::execution::v1alpha2::{ - execution_service_client::ExecutionServiceClient, - Block, - CommitmentState, - }, - native::sequencer::v1alpha1::RollupId, -}; use sequencer_client::SequencerBlock; use tendermint::{ Hash, diff --git a/crates/astria-conductor/src/executor/tests.rs b/crates/astria-conductor/src/executor/tests.rs index da7488247b..d09bac0ba1 100644 --- a/crates/astria-conductor/src/executor/tests.rs +++ b/crates/astria-conductor/src/executor/tests.rs @@ -4,12 +4,7 @@ use std::{ }; use ::optimism::test_utils::deploy_mock_optimism_portal; -use ethers::{ - prelude::*, - utils::AnvilInstance, -}; -use k256::ecdsa::SigningKey; -use proto::{ +use astria_core::{ generated::execution::v1alpha2::{ execution_service_server::{ ExecutionService, @@ -24,8 +19,13 @@ use proto::{ GetCommitmentStateRequest, UpdateCommitmentStateRequest, }, - native::sequencer::v1alpha1::test_utils::make_cometbft_block, + sequencer::v1alpha1::test_utils::make_cometbft_block, }; +use ethers::{ + prelude::*, + utils::AnvilInstance, +}; +use k256::ecdsa::SigningKey; use sha2::Digest as _; use tokio::{ sync::{ diff --git a/crates/astria-conductor/src/sequencer/mod.rs b/crates/astria-conductor/src/sequencer/mod.rs index c2a4e13337..9ee078a18a 100644 --- a/crates/astria-conductor/src/sequencer/mod.rs +++ b/crates/astria-conductor/src/sequencer/mod.rs @@ -392,6 +392,7 @@ mod tests { pin::Pin, }; + use astria_core::sequencer::v1alpha1::test_utils::make_cometbft_block; use color_eyre::eyre; use futures::{ future::{ @@ -402,7 +403,6 @@ mod tests { }, stream::FuturesOrdered, }; - use proto::native::sequencer::v1alpha1::test_utils::make_cometbft_block; use super::{ forward_block_or_resync, diff --git a/crates/astria-config/src/lib.rs b/crates/astria-config/src/lib.rs index 63ccdb92e5..1f178dce91 100644 --- a/crates/astria-config/src/lib.rs +++ b/crates/astria-config/src/lib.rs @@ -113,7 +113,7 @@ pub fn get() -> Result { /// let config: MyConfig = config::get()?; /// # Ok::<_, Error>(()) /// ``` -pub trait Config: core::fmt::Debug + DeserializeOwned { +pub trait Config: ::core::fmt::Debug + DeserializeOwned { const PREFIX: &'static str; /// Creates `Self` by reading its fields from the environment. diff --git a/crates/astria-proto/Cargo.toml b/crates/astria-core/Cargo.toml similarity index 73% rename from crates/astria-proto/Cargo.toml rename to crates/astria-core/Cargo.toml index 4937126b60..e07aaffc8e 100644 --- a/crates/astria-proto/Cargo.toml +++ b/crates/astria-core/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "astria-proto" +name = "astria-core" version = "0.1.0" edition = "2021" license = "Apache-2.0" @@ -17,29 +17,25 @@ keywords = ["astria", "grpc", "rpc", "blockchain", "execution", "protobuf"] [dependencies] merkle = { package = "astria-merkle", path = "../astria-merkle" } -ed25519-consensus = { workspace = true, optional = true } -hex = { workspace = true, optional = true } +ed25519-consensus = { workspace = true } +hex = { workspace = true } ibc-types = { workspace = true } penumbra-ibc = { workspace = true } penumbra-proto = { workspace = true } prost = { workspace = true } prost-types = { workspace = true } -serde = { workspace = true, optional = true } -sha2 = { workspace = true, optional = true } +rand = { workspace = true, optional = true } +sha2 = { workspace = true } tendermint = { workspace = true } tendermint-proto = { workspace = true } thiserror = { workspace = true } tonic = { workspace = true, optional = true } -tracing = { workspace = true, optional = true } +tracing = { workspace = true } indexmap = "2.1.0" -rand = { workspace = true, optional = true } [features] -default = ["native"] client = ["dep:tonic"] -native = ["dep:ed25519-consensus", "dep:hex", "dep:sha2", "dep:tracing"] -serde = ["dep:serde", "hex?/serde"] server = ["dep:tonic"] test-utils = ["dep:rand"] diff --git a/crates/astria-proto/README.md b/crates/astria-core/README.md similarity index 100% rename from crates/astria-proto/README.md rename to crates/astria-core/README.md diff --git a/crates/astria-proto/src/proto/generated/astria.execution.v1alpha1.rs b/crates/astria-core/src/generated/astria.execution.v1alpha1.rs similarity index 100% rename from crates/astria-proto/src/proto/generated/astria.execution.v1alpha1.rs rename to crates/astria-core/src/generated/astria.execution.v1alpha1.rs diff --git a/crates/astria-proto/src/proto/generated/astria.execution.v1alpha2.rs b/crates/astria-core/src/generated/astria.execution.v1alpha2.rs similarity index 100% rename from crates/astria-proto/src/proto/generated/astria.execution.v1alpha2.rs rename to crates/astria-core/src/generated/astria.execution.v1alpha2.rs diff --git a/crates/astria-proto/src/proto/generated/astria.primitive.v1.rs b/crates/astria-core/src/generated/astria.primitive.v1.rs similarity index 100% rename from crates/astria-proto/src/proto/generated/astria.primitive.v1.rs rename to crates/astria-core/src/generated/astria.primitive.v1.rs diff --git a/crates/astria-proto/src/proto/generated/astria.sequencer.v1alpha1.rs b/crates/astria-core/src/generated/astria.sequencer.v1alpha1.rs similarity index 100% rename from crates/astria-proto/src/proto/generated/astria.sequencer.v1alpha1.rs rename to crates/astria-core/src/generated/astria.sequencer.v1alpha1.rs diff --git a/crates/astria-core/src/generated/mod.rs b/crates/astria-core/src/generated/mod.rs new file mode 100644 index 0000000000..eb2b95e36a --- /dev/null +++ b/crates/astria-core/src/generated/mod.rs @@ -0,0 +1,28 @@ +#![allow(unreachable_pub, clippy::pedantic)] + +/// Files generated using [`tonic-build`] and [`buf`] via the [`tools/protobuf-compiler`] +/// build tool. +/// +/// [`tonic-build`]: https://docs.rs/tonic-build +/// [`buf`]: https://buf.build +/// [`tools/protobuf-compiler`]: ../../../../tools/protobuf-compiler +#[path = ""] +pub mod execution { + #[path = "astria.execution.v1alpha1.rs"] + pub mod v1alpha1; + + #[path = "astria.execution.v1alpha2.rs"] + pub mod v1alpha2; +} + +#[path = ""] +pub mod primitive { + #[path = "astria.primitive.v1.rs"] + pub mod v1; +} + +#[path = ""] +pub mod sequencer { + #[path = "astria.sequencer.v1alpha1.rs"] + pub mod v1alpha1; +} diff --git a/crates/astria-proto/src/native/mod.rs b/crates/astria-core/src/lib.rs similarity index 87% rename from crates/astria-proto/src/native/mod.rs rename to crates/astria-core/src/lib.rs index d1720c7966..32067cfaa0 100644 --- a/crates/astria-proto/src/native/mod.rs +++ b/crates/astria-core/src/lib.rs @@ -1,3 +1,11 @@ +#[cfg(not(target_pointer_width = "64"))] +compile_error!( + "library is only guaranteed to run on 64 bit machines due to casts from/to u64 and usize" +); + +#[rustfmt::skip] +pub mod generated; + pub mod primitive; pub mod sequencer; diff --git a/crates/astria-proto/src/native/primitive.rs b/crates/astria-core/src/primitive.rs similarity index 100% rename from crates/astria-proto/src/native/primitive.rs rename to crates/astria-core/src/primitive.rs diff --git a/crates/astria-proto/src/native/sequencer/asset.rs b/crates/astria-core/src/sequencer/asset.rs similarity index 100% rename from crates/astria-proto/src/native/sequencer/asset.rs rename to crates/astria-core/src/sequencer/asset.rs diff --git a/crates/astria-proto/src/native/sequencer/ics20_withdrawal.rs b/crates/astria-core/src/sequencer/ics20_withdrawal.rs similarity index 98% rename from crates/astria-proto/src/native/sequencer/ics20_withdrawal.rs rename to crates/astria-core/src/sequencer/ics20_withdrawal.rs index bc2ec89031..e94edd0e44 100644 --- a/crates/astria-proto/src/native/sequencer/ics20_withdrawal.rs +++ b/crates/astria-core/src/sequencer/ics20_withdrawal.rs @@ -21,10 +21,8 @@ use crate::{ primitive::v1::Uint128, sequencer::v1alpha1 as raw, }, - native::{ - sequencer::v1alpha1::Address, - Protobuf, - }, + sequencer::v1alpha1::Address, + Protobuf, }; /// Represents an IBC withdrawal of an asset from a source chain to a destination chain. diff --git a/crates/astria-proto/src/native/sequencer/mod.rs b/crates/astria-core/src/sequencer/mod.rs similarity index 100% rename from crates/astria-proto/src/native/sequencer/mod.rs rename to crates/astria-core/src/sequencer/mod.rs diff --git a/crates/astria-proto/src/native/sequencer/v1alpha1/mod.rs b/crates/astria-core/src/sequencer/v1alpha1/mod.rs similarity index 99% rename from crates/astria-proto/src/native/sequencer/v1alpha1/mod.rs rename to crates/astria-core/src/sequencer/v1alpha1/mod.rs index 13de61c252..ceea3f83d7 100644 --- a/crates/astria-proto/src/native/sequencer/v1alpha1/mod.rs +++ b/crates/astria-core/src/sequencer/v1alpha1/mod.rs @@ -10,6 +10,7 @@ use ed25519_consensus::{ }; use indexmap::IndexMap; use penumbra_ibc::IbcRelay; +use prost::Message as _; use sha2::{ Digest as _, Sha256, @@ -25,10 +26,8 @@ pub use super::{ }; use crate::{ generated::sequencer::v1alpha1 as raw, - native::{ - sequencer::v1alpha1::asset::IncorrectAssetIdLength, - Protobuf, - }, + sequencer::v1alpha1::asset::IncorrectAssetIdLength, + Protobuf, }; #[cfg(feature = "test-utils")] @@ -171,7 +170,6 @@ impl SignedTransaction { /// if the native [`UnsignedTransaction`] could not be created from the inner raw /// [`raw::UnsignedTransaction`]. pub fn try_from_raw(proto: raw::SignedTransaction) -> Result { - use crate::Message as _; let raw::SignedTransaction { signature, public_key, @@ -239,7 +237,6 @@ pub struct UnsignedTransaction { impl UnsignedTransaction { #[must_use] pub fn into_signed(self, signing_key: &SigningKey) -> SignedTransaction { - use crate::Message as _; let bytes = self.to_raw().encode_to_vec(); let signature = signing_key.sign(&bytes); let verification_key = signing_key.verification_key(); @@ -1031,10 +1028,7 @@ impl Display for Address { } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -#[cfg_attr(feature = "serde", serde(transparent))] pub struct RollupId { - #[cfg_attr(feature = "serde", serde(with = "hex::serde"))] inner: [u8; 32], } @@ -1047,7 +1041,7 @@ impl RollupId { /// /// # Examples /// ``` - /// use astria_proto::native::sequencer::v1alpha1::RollupId; + /// use astria_core::sequencer::v1alpha1::RollupId; /// let bytes = [42u8; 32]; /// let rollup_id = RollupId::new(bytes); /// assert_eq!(bytes, rollup_id.get()); @@ -1063,7 +1057,7 @@ impl RollupId { /// /// # Examples /// ``` - /// use astria_proto::native::sequencer::v1alpha1::RollupId; + /// use astria_core::sequencer::v1alpha1::RollupId; /// let bytes = [42u8; 32]; /// let rollup_id = RollupId::new(bytes); /// assert_eq!(bytes, rollup_id.get()); @@ -1077,7 +1071,7 @@ impl RollupId { /// /// Examples /// ``` - /// use astria_proto::native::sequencer::v1alpha1::RollupId; + /// use astria_core::sequencer::v1alpha1::RollupId; /// use sha2::{ /// Digest, /// Sha256, @@ -1098,7 +1092,7 @@ impl RollupId { /// /// # Examples /// ``` - /// use astria_proto::native::sequencer::v1alpha1::RollupId; + /// use astria_core::sequencer::v1alpha1::RollupId; /// let rollup_id = RollupId::new([42u8; 32]); /// assert_eq!(vec![42u8; 32], rollup_id.to_vec()); /// ``` diff --git a/crates/astria-proto/src/native/sequencer/v1alpha1/test_utils.rs b/crates/astria-core/src/sequencer/v1alpha1/test_utils.rs similarity index 100% rename from crates/astria-proto/src/native/sequencer/v1alpha1/test_utils.rs rename to crates/astria-core/src/sequencer/v1alpha1/test_utils.rs diff --git a/crates/astria-proto/src/lib.rs b/crates/astria-proto/src/lib.rs deleted file mode 100644 index 459ac14f87..0000000000 --- a/crates/astria-proto/src/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -#[cfg(not(target_pointer_width = "64"))] -compile_error!( - "library is only guaranteed to run on 64 bit machines due to casts from/to u64 and usize" -); - -pub use prost::{ - DecodeError, - EncodeError, - Message, -}; - -#[allow(warnings)] -#[allow(unreachable_pub)] -#[rustfmt::skip] -mod proto; - -#[cfg(feature = "native")] -pub mod native; - -pub use proto::generated; diff --git a/crates/astria-proto/src/proto/mod.rs b/crates/astria-proto/src/proto/mod.rs deleted file mode 100644 index fe308bf57e..0000000000 --- a/crates/astria-proto/src/proto/mod.rs +++ /dev/null @@ -1,31 +0,0 @@ -/// Files generated using [`prost`] and [`tonic`] via [`buf`] and its -/// [`neoeinstein-prost`] and [`neoeinstein-tonic`] plugins. -/// -/// [`prost`]: -/// [`tonic`]: -/// [`buf`]: https://buf.build -/// [`neoeinstein-prost`]: https://buf.build/community/neoeinstein-prost -/// [`neoeinstein-tonic`]: https://buf.build/community/neoeinstein-tonic -#[path = "generated"] -pub mod generated { - #[path = ""] - pub mod execution { - #[path = "astria.execution.v1alpha1.rs"] - pub mod v1alpha1; - - #[path = "astria.execution.v1alpha2.rs"] - pub mod v1alpha2; - } - - #[path = ""] - pub mod primitive { - #[path = "astria.primitive.v1.rs"] - pub mod v1; - } - - #[path = ""] - pub mod sequencer { - #[path = "astria.sequencer.v1alpha1.rs"] - pub mod v1alpha1; - } -} diff --git a/crates/astria-sequencer-client/Cargo.toml b/crates/astria-sequencer-client/Cargo.toml index 598b7f7505..af3972baf1 100644 --- a/crates/astria-sequencer-client/Cargo.toml +++ b/crates/astria-sequencer-client/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -proto = { package = "astria-proto", path = "../astria-proto" } +astria-core = { path = "../astria-core" } async-trait = { workspace = true } futures = { workspace = true } @@ -13,6 +13,7 @@ tendermint = { workspace = true } tendermint-rpc = { workspace = true } tracing = { workspace = true } thiserror = { workspace = true } +prost.workspace = true [features] http = ["tendermint-rpc/http-client"] diff --git a/crates/astria-sequencer-client/src/extension_trait.rs b/crates/astria-sequencer-client/src/extension_trait.rs index ac8d25a577..549c30f4b3 100644 --- a/crates/astria-sequencer-client/src/extension_trait.rs +++ b/crates/astria-sequencer-client/src/extension_trait.rs @@ -26,9 +26,7 @@ use std::{ sync::Arc, }; -use async_trait::async_trait; -use futures::Stream; -pub use proto::native::sequencer::v1alpha1::{ +pub use astria_core::sequencer::v1alpha1::{ Address, BalanceResponse, NonceResponse, @@ -36,6 +34,12 @@ pub use proto::native::sequencer::v1alpha1::{ SequencerBlockError, SignedTransaction, }; +use async_trait::async_trait; +use futures::Stream; +use prost::{ + DecodeError, + Message as _, +}; #[cfg(feature = "http")] use tendermint_rpc::HttpClient; #[cfg(feature = "websocket")] @@ -106,7 +110,7 @@ impl Error { fn abci_query_deserialization( target: &'static str, response: tendermint_rpc::endpoint::abci_query::AbciQuery, - inner: proto::DecodeError, + inner: DecodeError, ) -> Self { Self { inner: ErrorKind::abci_query_deserialization(target, response, inner), @@ -130,7 +134,7 @@ impl Error { /// Error if deserialization of the bytes in an abci query response failed. #[derive(Clone, Debug)] pub struct AbciQueryDeserializationError { - inner: proto::DecodeError, + inner: DecodeError, response: Box, target: &'static str, } @@ -252,7 +256,7 @@ impl ErrorKind { fn abci_query_deserialization( target: &'static str, response: tendermint_rpc::endpoint::abci_query::AbciQuery, - inner: proto::DecodeError, + inner: DecodeError, ) -> Self { Self::AbciQueryDeserialization(AbciQueryDeserializationError { inner, @@ -387,7 +391,6 @@ pub trait SequencerClientExt: Client { AddressT: Into
+ Send, HeightT: Into + Send, { - use proto::Message as _; const PREFIX: &[u8] = b"accounts/balance/"; let path = make_path_from_prefix_and_address(PREFIX, address.into().0); @@ -398,7 +401,7 @@ pub trait SequencerClientExt: Client { .map_err(|e| Error::tendermint_rpc("abci_query", e))?; let proto_response = - proto::generated::sequencer::v1alpha1::BalanceResponse::decode(&*response.value) + astria_core::generated::sequencer::v1alpha1::BalanceResponse::decode(&*response.value) .map_err(|e| { Error::abci_query_deserialization( "astria.sequencer.v1alpha1.BalanceResponse", @@ -439,7 +442,6 @@ pub trait SequencerClientExt: Client { AddressT: Into
+ Send, HeightT: Into + Send, { - use proto::Message as _; const PREFIX: &[u8] = b"accounts/nonce/"; let path = make_path_from_prefix_and_address(PREFIX, address.into().0); @@ -450,7 +452,7 @@ pub trait SequencerClientExt: Client { .map_err(|e| Error::tendermint_rpc("abci_query", e))?; let proto_response = - proto::generated::sequencer::v1alpha1::NonceResponse::decode(&*response.value) + astria_core::generated::sequencer::v1alpha1::NonceResponse::decode(&*response.value) .map_err(|e| { Error::abci_query_deserialization( "astria.sequencer.v1alpha1.NonceResponse", @@ -514,7 +516,6 @@ pub trait SequencerClientExt: Client { &self, tx: SignedTransaction, ) -> Result { - use proto::Message as _; let tx_bytes = tx.into_raw().encode_to_vec(); self.broadcast_tx_sync(tx_bytes) .await @@ -533,7 +534,6 @@ pub trait SequencerClientExt: Client { &self, tx: SignedTransaction, ) -> Result { - use proto::Message as _; let tx_bytes = tx.into_raw().encode_to_vec(); self.broadcast_tx_commit(tx_bytes) .await diff --git a/crates/astria-sequencer-client/src/lib.rs b/crates/astria-sequencer-client/src/lib.rs index 71b25cc3ae..b2b5088816 100644 --- a/crates/astria-sequencer-client/src/lib.rs +++ b/crates/astria-sequencer-client/src/lib.rs @@ -6,7 +6,7 @@ compile_error!("at least one of the `http` or `websocket` features must be enabl #[cfg(any(feature = "http", feature = "websocket"))] pub use __feature_gated_exports::*; -pub use proto::native::sequencer::v1alpha1::{ +pub use astria_core::sequencer::v1alpha1::{ Address, BalanceResponse, NonceResponse, diff --git a/crates/astria-sequencer-client/src/tests/http.rs b/crates/astria-sequencer-client/src/tests/http.rs index 605e0d74dc..4e1f8c0f19 100644 --- a/crates/astria-sequencer-client/src/tests/http.rs +++ b/crates/astria-sequencer-client/src/tests/http.rs @@ -1,12 +1,12 @@ -use ed25519_consensus::SigningKey; -use hex_literal::hex; -use proto::native::sequencer::v1alpha1::{ +use astria_core::sequencer::v1alpha1::{ asset::default_native_asset_id, Address, SignedTransaction, TransferAction, UnsignedTransaction, }; +use ed25519_consensus::SigningKey; +use hex_literal::hex; use serde_json::json; use tendermint::{ block::Height, @@ -56,7 +56,7 @@ impl MockSequencer { async fn register_abci_query_response( server: &MockServer, query_path: &str, - raw: impl proto::Message, + raw: impl prost::Message, ) -> MockGuard { let response = tendermint_rpc::endpoint::abci_query::Response { response: tendermint_rpc::endpoint::abci_query::AbciQuery { @@ -141,7 +141,7 @@ fn create_signed_transaction() -> SignedTransaction { #[tokio::test] async fn get_latest_nonce() { - use proto::generated::sequencer::v1alpha1::NonceResponse; + use astria_core::generated::sequencer::v1alpha1::NonceResponse; let MockSequencer { server, client, @@ -164,7 +164,7 @@ async fn get_latest_nonce() { #[tokio::test] async fn get_latest_balance() { - use proto::generated::sequencer::v1alpha1::BalanceResponse; + use astria_core::generated::sequencer::v1alpha1::BalanceResponse; let MockSequencer { server, client, diff --git a/crates/astria-sequencer-relayer/Cargo.toml b/crates/astria-sequencer-relayer/Cargo.toml index 6c6fe958dc..f67bfc808c 100644 --- a/crates/astria-sequencer-relayer/Cargo.toml +++ b/crates/astria-sequencer-relayer/Cargo.toml @@ -32,9 +32,9 @@ tendermint-rpc = { workspace = true, features = ["http-client"] } tracing = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } +astria-core = { path = "../astria-core" } celestia-client = { package = "astria-celestia-client", path = "../astria-celestia-client" } config = { package = "astria-config", path = "../astria-config" } -proto = { package = "astria-proto", path = "../astria-proto" } sequencer-client = { package = "astria-sequencer-client", path = "../astria-sequencer-client", features = [ "http", ] } @@ -45,11 +45,8 @@ celestia-mock = { package = "astria-celestia-mock", path = "../astria-celestia-m config = { package = "astria-config", path = "../astria-config", features = [ "tests", ] } +astria-core = { path = "../astria-core", features = ["test-utils"] } merkle = { package = "astria-merkle", path = "../astria-merkle" } -proto = { package = "astria-proto", path = "../astria-proto", features = [ - "test-utils", -] } - rand_core = { version = "0.6", features = ["getrandom"] } jsonrpsee = { workspace = true, features = ["server"] } diff --git a/crates/astria-sequencer-relayer/tests/blackbox/helper.rs b/crates/astria-sequencer-relayer/tests/blackbox/helper.rs index 8f26c3adca..408578b95e 100644 --- a/crates/astria-sequencer-relayer/tests/blackbox/helper.rs +++ b/crates/astria-sequencer-relayer/tests/blackbox/helper.rs @@ -3,6 +3,7 @@ use std::{ time::Duration, }; +use astria_core::sequencer::v1alpha1::test_utils::ConfigureCometBftBlock; use astria_sequencer_relayer::{ config::Config, telemetry, @@ -14,7 +15,6 @@ use celestia_client::celestia_types::{ }; use ed25519_consensus::SigningKey; use once_cell::sync::Lazy; -use proto::native::sequencer::v1alpha1::test_utils::ConfigureCometBftBlock; use serde_json::json; use tempfile::NamedTempFile; use tendermint_config::PrivValidatorKey; diff --git a/crates/astria-sequencer-types/Cargo.toml b/crates/astria-sequencer-types/Cargo.toml index e8d32b5ba9..3293e9a749 100644 --- a/crates/astria-sequencer-types/Cargo.toml +++ b/crates/astria-sequencer-types/Cargo.toml @@ -4,21 +4,15 @@ version = "0.1.0" edition = "2021" [dependencies] -base64 = { workspace = true } -base64-serde = { workspace = true } -hex = { workspace = true, features = ["serde"] } prost = { workspace = true } -serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = ["raw_value"] } sha2 = { workspace = true } tendermint = { workspace = true, features = ["rust-crypto"] } tendermint-proto = { workspace = true } -thiserror = { workspace = true } -tracing = { workspace = true } -merkle = { package = "astria-merkle", path = "../astria-merkle", features = [ - "serde", -] } -proto = { package = "astria-proto", path = "../astria-proto", features = [ - "serde", -] } +merkle = { package = "astria-merkle", path = "../astria-merkle" } + +ed25519-consensus = { workspace = true, optional = true } +rand = { workspace = true, optional = true } + +[features] +test-utils = ["dep:ed25519-consensus", "dep:rand"] diff --git a/crates/astria-sequencer-types/src/lib.rs b/crates/astria-sequencer-types/src/lib.rs index d42ced68ea..866a54cb4e 100644 --- a/crates/astria-sequencer-types/src/lib.rs +++ b/crates/astria-sequencer-types/src/lib.rs @@ -1,5 +1,4 @@ pub mod abci_code; pub mod cometbft; -pub mod serde; pub use abci_code::AbciCode; diff --git a/crates/astria-sequencer-types/src/namespace.rs b/crates/astria-sequencer-types/src/namespace.rs deleted file mode 100644 index b3dac9bbfb..0000000000 --- a/crates/astria-sequencer-types/src/namespace.rs +++ /dev/null @@ -1,86 +0,0 @@ -use std::{ - fmt, - ops::Deref, -}; - -use celestia_jsonrpc_client::blob::NAMESPACE_ID_AVAILABLE_LEN; -use serde::{ - de::{self,}, - Deserialize, - Deserializer, - Serialize, -}; -use sha2::{ - Digest, - Sha256, -}; - -/// The default namespace blocks are written to. -/// A block in this namespace contains "pointers" to the rollup txs contained -/// in that block; ie. a list of tuples of (DA block height, namespace). -pub static DEFAULT_NAMESPACE: Namespace = Namespace(*b"astriasequ"); - -/// Namespace represents a Celestia namespace. -#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)] -pub struct Namespace([u8; NAMESPACE_ID_AVAILABLE_LEN]); - -impl Deref for Namespace { - type Target = [u8; NAMESPACE_ID_AVAILABLE_LEN]; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl Namespace { - #[must_use] - pub fn new(inner: [u8; NAMESPACE_ID_AVAILABLE_LEN]) -> Self { - Self(inner) - } - - /// returns an 10-byte namespace given a byte slice by hashing - /// the bytes with sha256 and returning the first 10 bytes. - #[must_use] - #[allow(clippy::missing_panics_doc)] - pub fn from_slice(bytes: &[u8]) -> Namespace { - #[allow(clippy::assertions_on_constants)] - const _: () = assert!( - NAMESPACE_ID_AVAILABLE_LEN <= 32, - "this can only be violated if celestia had a breaking change fundamentally altering \ - the size of its namespace" - ); - - let mut hasher = Sha256::new(); - hasher.update(bytes); - let result = hasher.finalize(); - Namespace( - result[0..NAMESPACE_ID_AVAILABLE_LEN] - .to_owned() - .try_into() - .expect("should not never fail unless sha256 no longer returns 32 bytes"), - ) - } -} - -impl fmt::Display for Namespace { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - // FIXME: `hex::encode` does an extra allocation which could be removed - f.write_str(&hex::encode(self.0)) - } -} - -impl Serialize for Namespace { - fn serialize(&self, serializer: S) -> Result { - hex::serialize(self.0, serializer) - } -} - -impl<'de> Deserialize<'de> for Namespace { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let bytes = hex::deserialize(deserializer).map_err(de::Error::custom)?; - Ok(Namespace::new(bytes)) - } -} diff --git a/crates/astria-sequencer-types/src/serde.rs b/crates/astria-sequencer-types/src/serde.rs deleted file mode 100644 index 7016a29b69..0000000000 --- a/crates/astria-sequencer-types/src/serde.rs +++ /dev/null @@ -1,41 +0,0 @@ -//! Utilities for serializing and deserializing bytes -use std::collections::BTreeMap; - -use base64_serde::base64_serde_type; -use proto::native::sequencer::v1alpha1::RollupId; -use serde::{ - ser::SerializeMap, - Serialize, -}; - -base64_serde_type!(pub Base64Standard, base64::engine::general_purpose::STANDARD); - -pub struct ChainIdToTxCount<'a>(pub(crate) &'a BTreeMap>>); - -impl<'a> ChainIdToTxCount<'a> { - #[must_use] - pub fn new(rollup_data: &BTreeMap>>) -> ChainIdToTxCount { - ChainIdToTxCount(rollup_data) - } -} - -impl<'a> Serialize for ChainIdToTxCount<'a> { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - let mut map = serializer.serialize_map(Some(self.0.len()))?; - for (ns, data) in self.0 { - map.serialize_entry(&ns, &data.len())?; - } - map.end() - } -} - -impl<'a> std::fmt::Display for ChainIdToTxCount<'a> { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - // This cannot fail because we are only serializing into a string (unless the system is - // OOM). - f.write_str(&serde_json::to_string(self).map_err(|_| std::fmt::Error)?) - } -} diff --git a/crates/astria-sequencer-types/src/test_utils.rs b/crates/astria-sequencer-types/src/test_utils.rs new file mode 100644 index 0000000000..9e3b44287f --- /dev/null +++ b/crates/astria-sequencer-types/src/test_utils.rs @@ -0,0 +1,169 @@ +//! Utilities that are intended to be used in tests but not outside of it. + +#![allow(clippy::missing_panics_doc)] + +use astria_core::sequencer::v1alpha1::RollupId; +use tendermint::block::Header; + +#[must_use] +/// Returns a default tendermint block header for test purposes. +pub fn default_header() -> Header { + use tendermint::{ + account, + block::{ + header::Version, + Height, + }, + chain, + hash::AppHash, + Hash, + Time, + }; + + Header { + version: Version { + block: 0, + app: 0, + }, + chain_id: chain::Id::try_from("test").unwrap(), + height: Height::from(1u32), + time: Time::now(), + last_block_id: None, + last_commit_hash: None, + data_hash: None, + validators_hash: Hash::Sha256([0; 32]), + next_validators_hash: Hash::Sha256([0; 32]), + consensus_hash: Hash::Sha256([0; 32]), + app_hash: AppHash::try_from([0; 32].to_vec()).unwrap(), + last_results_hash: None, + evidence_hash: None, + proposer_address: account::Id::try_from([0u8; 20].to_vec()).unwrap(), + } +} + +pub fn create_tendermint_block() -> tendermint::Block { + use proto::{ + native::sequencer::v1alpha1::{ + asset::{ + Denom, + DEFAULT_NATIVE_ASSET_DENOM, + }, + SequenceAction, + UnsignedTransaction, + }, + Message as _, + }; + use rand::rngs::OsRng; + use sha2::Digest as _; + use tendermint::{ + block, + chain, + evidence, + hash::AppHash, + merkle::simple_hash_from_byte_vectors, + Hash, + Time, + }; + + let height = 1u32; + + let signing_key = ed25519_consensus::SigningKey::new(OsRng); + let public_key: tendermint::crypto::ed25519::VerificationKey = + signing_key.verification_key().as_ref().try_into().unwrap(); + let proposer_address = tendermint::account::Id::from(public_key); + + let suffix = height.to_string().into_bytes(); + let rollup_id = RollupId::from_unhashed_bytes([b"test_chain_id_", &*suffix].concat()); + let asset = Denom::from_base_denom(DEFAULT_NATIVE_ASSET_DENOM); + let signed_transaction = UnsignedTransaction { + nonce: 1, + actions: vec![ + SequenceAction { + rollup_id, + data: [b"hello_world_id_", &*suffix].concat(), + } + .into(), + ], + fee_asset_id: asset.id(), + } + .into_signed(&signing_key); + let rollup_transactions = proto::native::sequencer::v1alpha1::group_sequence_actions_in_signed_transaction_transactions_by_rollup_id(&[signed_transaction.clone()]); + let rollup_transactions_tree = + proto::native::sequencer::v1alpha1::derive_merkle_tree_from_rollup_txs( + &rollup_transactions, + ); + + let rollup_ids_root = merkle::Tree::from_leaves(std::iter::once(rollup_id)).root(); + let data = vec![ + rollup_transactions_tree.root().to_vec(), + rollup_ids_root.to_vec(), + signed_transaction.into_raw().encode_to_vec(), + ]; + let data_hash = Some(Hash::Sha256(simple_hash_from_byte_vectors::( + &data.iter().map(sha2::Sha256::digest).collect::>(), + ))); + + let (last_commit_hash, last_commit) = make_test_commit_and_hash(); + + tendermint::Block::new( + block::Header { + version: block::header::Version { + block: 0, + app: 0, + }, + chain_id: chain::Id::try_from("test").unwrap(), + height: block::Height::from(height), + time: Time::now(), + last_block_id: None, + last_commit_hash: (height > 1).then_some(last_commit_hash), + data_hash, + validators_hash: Hash::Sha256([0; 32]), + next_validators_hash: Hash::Sha256([0; 32]), + consensus_hash: Hash::Sha256([0; 32]), + app_hash: AppHash::try_from([0; 32].to_vec()).unwrap(), + last_results_hash: None, + evidence_hash: None, + proposer_address, + }, + data, + evidence::List::default(), + // The first height must not, every height after must contain a last commit + (height > 1).then_some(last_commit), + ) + .unwrap() +} + +// Returns a tendermint commit and hash for testing purposes. +#[must_use] +pub fn make_test_commit_and_hash() -> (tendermint::Hash, tendermint::block::Commit) { + let commit = tendermint::block::Commit { + height: 1u32.into(), + ..Default::default() + }; + (calculate_last_commit_hash(&commit), commit) +} + +// Calculates the `last_commit_hash` given a Tendermint [`Commit`]. +// +// It merkleizes the commit and returns the root. The leaves of the merkle tree +// are the protobuf-encoded [`CommitSig`]s; ie. the signatures that the commit consist of. +// +// See https://github.com/cometbft/cometbft/blob/539985efc7d461668ffb46dff88b3f7bb9275e5a/types/block.go#L922 +#[must_use] +fn calculate_last_commit_hash(commit: &tendermint::block::Commit) -> tendermint::Hash { + use prost::Message as _; + use tendermint::{ + crypto, + merkle, + }; + use tendermint_proto::types::CommitSig; + + let signatures = commit + .signatures + .iter() + .map(|commit_sig| CommitSig::from(commit_sig.clone()).encode_to_vec()) + .collect::>(); + tendermint::Hash::Sha256(merkle::simple_hash_from_byte_vectors::< + crypto::default::Sha256, + >(&signatures)) +} diff --git a/crates/astria-sequencer/Cargo.toml b/crates/astria-sequencer/Cargo.toml index 3cae01e780..452de17df2 100644 --- a/crates/astria-sequencer/Cargo.toml +++ b/crates/astria-sequencer/Cargo.toml @@ -5,9 +5,9 @@ edition = "2021" rust-version = "1.73.0" [dependencies] +"astria-core" = { path = "../astria-core" } config = { package = "astria-config", path = "../astria-config" } merkle = { package = "astria-merkle", path = "../astria-merkle" } -proto = { package = "astria-proto", path = "../astria-proto" } telemetry = { package = "astria-telemetry", path = "../astria-telemetry" } sequencer_types = { package = "astria-sequencer-types", path = "../astria-sequencer-types" } diff --git a/crates/astria-sequencer/src/accounts/action.rs b/crates/astria-sequencer/src/accounts/action.rs index 1a0a496ace..078e1b9244 100644 --- a/crates/astria-sequencer/src/accounts/action.rs +++ b/crates/astria-sequencer/src/accounts/action.rs @@ -4,7 +4,7 @@ use anyhow::{ Context, Result, }; -use proto::native::sequencer::v1alpha1::{ +use astria_core::sequencer::v1alpha1::{ asset, Address, TransferAction, diff --git a/crates/astria-sequencer/src/accounts/ics20_transfer.rs b/crates/astria-sequencer/src/accounts/ics20_transfer.rs index d555253ef5..21460895be 100644 --- a/crates/astria-sequencer/src/accounts/ics20_transfer.rs +++ b/crates/astria-sequencer/src/accounts/ics20_transfer.rs @@ -14,6 +14,10 @@ use anyhow::{ Context as _, Result, }; +use astria_core::sequencer::v1alpha1::{ + asset::IbcAsset, + Address, +}; use cnidarium::{ StateRead, StateWrite, @@ -43,10 +47,6 @@ use penumbra_ibc::component::app_handler::{ AppHandlerExecute, }; use penumbra_proto::penumbra::core::component::ibc::v1alpha1::FungibleTokenPacketData; -use proto::native::sequencer::v1alpha1::{ - asset::IbcAsset, - Address, -}; use super::state_ext::{ StateReadExt as _, diff --git a/crates/astria-sequencer/src/accounts/ics20_withdrawal.rs b/crates/astria-sequencer/src/accounts/ics20_withdrawal.rs index b86b48cd25..66843f1191 100644 --- a/crates/astria-sequencer/src/accounts/ics20_withdrawal.rs +++ b/crates/astria-sequencer/src/accounts/ics20_withdrawal.rs @@ -3,6 +3,12 @@ use anyhow::{ Context as _, Result, }; +use astria_core::sequencer::v1alpha1::{ + asset, + asset::IbcAsset, + Address, + Ics20Withdrawal, +}; use ibc_types::core::channel::{ ChannelId, PortId, @@ -13,12 +19,6 @@ use penumbra_ibc::component::packet::{ SendPacketWrite as _, Unchecked, }; -use proto::native::sequencer::v1alpha1::{ - asset, - asset::IbcAsset, - Address, - Ics20Withdrawal, -}; use tracing::instrument; use crate::{ diff --git a/crates/astria-sequencer/src/accounts/query.rs b/crates/astria-sequencer/src/accounts/query.rs index 3d6a8bdbee..99f3143ca5 100644 --- a/crates/astria-sequencer/src/accounts/query.rs +++ b/crates/astria-sequencer/src/accounts/query.rs @@ -1,9 +1,10 @@ use anyhow::Context as _; +use astria_core::sequencer::v1alpha1::Address; use cnidarium::{ Snapshot, Storage, }; -use proto::native::sequencer::v1alpha1::Address; +use prost::Message as _; use sequencer_types::abci_code::AbciCode; use tendermint::{ abci::{ @@ -24,10 +25,7 @@ pub(crate) async fn balance_request( request: request::Query, params: Vec<(String, String)>, ) -> response::Query { - use proto::{ - native::sequencer::v1alpha1::BalanceResponse, - Message as _, - }; + use astria_core::sequencer::v1alpha1::BalanceResponse; let (address, snapshot, height) = match preprocess_request(&storage, &request, ¶ms).await { Ok(tup) => tup, Err(err_rsp) => return err_rsp, @@ -70,10 +68,7 @@ pub(crate) async fn nonce_request( request: request::Query, params: Vec<(String, String)>, ) -> response::Query { - use proto::{ - native::sequencer::v1alpha1::NonceResponse, - Message as _, - }; + use astria_core::sequencer::v1alpha1::NonceResponse; let (address, snapshot, height) = match preprocess_request(&storage, &request, ¶ms).await { Ok(tup) => tup, Err(err_rsp) => return err_rsp, diff --git a/crates/astria-sequencer/src/accounts/state_ext.rs b/crates/astria-sequencer/src/accounts/state_ext.rs index 2f05a5a5a5..17bd15787d 100644 --- a/crates/astria-sequencer/src/accounts/state_ext.rs +++ b/crates/astria-sequencer/src/accounts/state_ext.rs @@ -2,6 +2,10 @@ use anyhow::{ Context, Result, }; +use astria_core::sequencer::v1alpha1::{ + asset, + Address, +}; use async_trait::async_trait; use borsh::{ BorshDeserialize, @@ -13,10 +17,6 @@ use cnidarium::{ }; use hex::ToHex as _; use ibc_types::core::channel::ChannelId; -use proto::native::sequencer::v1alpha1::{ - asset, - Address, -}; use tracing::{ debug, instrument, diff --git a/crates/astria-sequencer/src/app.rs b/crates/astria-sequencer/src/app.rs index 930dde163c..d3b51d7198 100644 --- a/crates/astria-sequencer/src/app.rs +++ b/crates/astria-sequencer/src/app.rs @@ -11,6 +11,13 @@ use anyhow::{ ensure, Context, }; +use astria_core::{ + generated::sequencer::v1alpha1 as raw, + sequencer::v1alpha1::{ + Address, + SignedTransaction, + }, +}; use cnidarium::{ ArcStateDeltaExt, RootHash, @@ -18,14 +25,7 @@ use cnidarium::{ StateDelta, Storage, }; -use proto::{ - generated::sequencer::v1alpha1 as raw, - native::sequencer::v1alpha1::{ - Address, - SignedTransaction, - }, - Message as _, -}; +use prost::Message as _; use sha2::Digest as _; use tendermint::abci::{ self, @@ -364,7 +364,7 @@ impl App { #[instrument(name = "App::deliver_tx", skip(self))] pub(crate) async fn deliver_tx( &mut self, - signed_tx: proto::native::sequencer::v1alpha1::SignedTransaction, + signed_tx: astria_core::sequencer::v1alpha1::SignedTransaction, ) -> anyhow::Result> { let signed_tx_2 = signed_tx.clone(); let stateless = @@ -504,10 +504,9 @@ impl App { #[cfg(test)] mod test { - use ed25519_consensus::SigningKey; #[cfg(feature = "mint")] - use proto::native::sequencer::v1alpha1::MintAction; - use proto::native::sequencer::v1alpha1::{ + use astria_core::sequencer::v1alpha1::MintAction; + use astria_core::sequencer::v1alpha1::{ asset, asset::DEFAULT_NATIVE_ASSET_DENOM, Address, @@ -518,6 +517,7 @@ mod test { UnsignedTransaction, ADDRESS_LEN, }; + use ed25519_consensus::SigningKey; use tendermint::{ abci::types::CommitInfo, account, @@ -933,7 +933,7 @@ mod test { let tx = UnsignedTransaction { nonce: 0, - actions: vec![proto::native::sequencer::v1alpha1::Action::ValidatorUpdate( + actions: vec![astria_core::sequencer::v1alpha1::Action::ValidatorUpdate( update.clone(), )], fee_asset_id: get_native_asset().id(), @@ -963,13 +963,11 @@ mod test { let tx = UnsignedTransaction { nonce: 0, - actions: vec![ - proto::native::sequencer::v1alpha1::Action::SudoAddressChange( - SudoAddressChangeAction { - new_address, - }, - ), - ], + actions: vec![astria_core::sequencer::v1alpha1::Action::SudoAddressChange( + SudoAddressChangeAction { + new_address, + }, + )], fee_asset_id: get_native_asset().id(), }; @@ -995,13 +993,11 @@ mod test { let tx = UnsignedTransaction { nonce: 0, - actions: vec![ - proto::native::sequencer::v1alpha1::Action::SudoAddressChange( - SudoAddressChangeAction { - new_address: alice_address, - }, - ), - ], + actions: vec![astria_core::sequencer::v1alpha1::Action::SudoAddressChange( + SudoAddressChangeAction { + new_address: alice_address, + }, + )], fee_asset_id: get_native_asset().id(), }; diff --git a/crates/astria-sequencer/src/asset/mod.rs b/crates/astria-sequencer/src/asset/mod.rs index 7e2dd58433..7efea11a23 100644 --- a/crates/astria-sequencer/src/asset/mod.rs +++ b/crates/astria-sequencer/src/asset/mod.rs @@ -2,7 +2,7 @@ pub(crate) mod state_ext; use std::sync::OnceLock; -use proto::native::sequencer::v1alpha1::asset::Denom; +use astria_core::sequencer::v1alpha1::asset::Denom; pub(crate) static NATIVE_ASSET: OnceLock = OnceLock::new(); diff --git a/crates/astria-sequencer/src/asset/state_ext.rs b/crates/astria-sequencer/src/asset/state_ext.rs index 6bbc93c257..c16194d1ca 100644 --- a/crates/astria-sequencer/src/asset/state_ext.rs +++ b/crates/astria-sequencer/src/asset/state_ext.rs @@ -3,6 +3,10 @@ use anyhow::{ Context as _, Result, }; +use astria_core::sequencer::v1alpha1::{ + asset, + asset::IbcAsset, +}; use async_trait::async_trait; use borsh::{ BorshDeserialize, @@ -13,10 +17,6 @@ use cnidarium::{ StateWrite, }; use hex::ToHex as _; -use proto::native::sequencer::v1alpha1::{ - asset, - asset::IbcAsset, -}; use tracing::instrument; /// Newtype wrapper to read and write a denomination trace from rocksdb. diff --git a/crates/astria-sequencer/src/authority/action.rs b/crates/astria-sequencer/src/authority/action.rs index 7cce6df6bb..555c7d4925 100644 --- a/crates/astria-sequencer/src/authority/action.rs +++ b/crates/astria-sequencer/src/authority/action.rs @@ -3,7 +3,7 @@ use anyhow::{ Context as _, Result, }; -use proto::native::sequencer::v1alpha1::{ +use astria_core::sequencer::v1alpha1::{ asset, Address, SudoAddressChangeAction, diff --git a/crates/astria-sequencer/src/authority/component.rs b/crates/astria-sequencer/src/authority/component.rs index 32a82d5529..2185896e92 100644 --- a/crates/astria-sequencer/src/authority/component.rs +++ b/crates/astria-sequencer/src/authority/component.rs @@ -4,7 +4,7 @@ use anyhow::{ Context, Result, }; -use proto::native::sequencer::v1alpha1::Address; +use astria_core::sequencer::v1alpha1::Address; use tendermint::{ abci::request::{ BeginBlock, diff --git a/crates/astria-sequencer/src/authority/state_ext.rs b/crates/astria-sequencer/src/authority/state_ext.rs index b2da34a222..2be1e0cdd5 100644 --- a/crates/astria-sequencer/src/authority/state_ext.rs +++ b/crates/astria-sequencer/src/authority/state_ext.rs @@ -6,6 +6,10 @@ use anyhow::{ Context, Result, }; +use astria_core::sequencer::v1alpha1::{ + Address, + ADDRESS_LEN, +}; use async_trait::async_trait; use borsh::{ BorshDeserialize, @@ -15,10 +19,6 @@ use cnidarium::{ StateRead, StateWrite, }; -use proto::native::sequencer::v1alpha1::{ - Address, - ADDRESS_LEN, -}; use serde::{ Deserialize, Serialize, diff --git a/crates/astria-sequencer/src/genesis.rs b/crates/astria-sequencer/src/genesis.rs index 51213b03ab..f24bd2364c 100644 --- a/crates/astria-sequencer/src/genesis.rs +++ b/crates/astria-sequencer/src/genesis.rs @@ -1,4 +1,4 @@ -use proto::native::sequencer::v1alpha1::Address; +use astria_core::sequencer::v1alpha1::Address; use serde::{ Deserialize, Deserializer, diff --git a/crates/astria-sequencer/src/mint/action.rs b/crates/astria-sequencer/src/mint/action.rs index 1118634434..9f69746bf1 100644 --- a/crates/astria-sequencer/src/mint/action.rs +++ b/crates/astria-sequencer/src/mint/action.rs @@ -3,7 +3,7 @@ use anyhow::{ Context as _, Result, }; -use proto::native::sequencer::v1alpha1::{ +use astria_core::sequencer::v1alpha1::{ asset, Address, MintAction, diff --git a/crates/astria-sequencer/src/proposal/commitment.rs b/crates/astria-sequencer/src/proposal/commitment.rs index 8674bd906d..974414b77a 100644 --- a/crates/astria-sequencer/src/proposal/commitment.rs +++ b/crates/astria-sequencer/src/proposal/commitment.rs @@ -1,5 +1,5 @@ +use astria_core::sequencer::v1alpha1::SignedTransaction; use bytes::Bytes; -use proto::native::sequencer::v1alpha1::SignedTransaction; /// Wrapper for values returned by [`generate_sequence_actions_commitment`]. pub(crate) struct GeneratedCommitments { @@ -40,14 +40,14 @@ impl GeneratedCommitments { pub(crate) fn generate_sequence_actions_commitment( signed_txs: &[SignedTransaction], ) -> GeneratedCommitments { - let rollup_ids_to_txs = proto::native::sequencer::v1alpha1::group_sequence_actions_in_signed_transaction_transactions_by_rollup_id(signed_txs); + let rollup_ids_to_txs = astria_core::sequencer::v1alpha1::group_sequence_actions_in_signed_transaction_transactions_by_rollup_id(signed_txs); let rollup_ids_root = merkle::Tree::from_leaves(rollup_ids_to_txs.keys()).root(); // each leaf of the action tree is the root of a merkle tree of the `sequence::Action`s // with the same `rollup_id`, prepended with `rollup_id`. // the leaves are sorted in ascending order by `rollup_id`. let sequence_actions_root = - proto::native::sequencer::v1alpha1::derive_merkle_tree_from_rollup_txs(&rollup_ids_to_txs) + astria_core::sequencer::v1alpha1::derive_merkle_tree_from_rollup_txs(&rollup_ids_to_txs) .root(); GeneratedCommitments { sequence_actions_root, @@ -57,8 +57,7 @@ pub(crate) fn generate_sequence_actions_commitment( #[cfg(test)] mod test { - use ed25519_consensus::SigningKey; - use proto::native::sequencer::v1alpha1::{ + use astria_core::sequencer::v1alpha1::{ asset::{ Denom, DEFAULT_NATIVE_ASSET_DENOM, @@ -69,6 +68,7 @@ mod test { TransferAction, UnsignedTransaction, }; + use ed25519_consensus::SigningKey; use rand::rngs::OsRng; use super::*; diff --git a/crates/astria-sequencer/src/sequence.rs b/crates/astria-sequencer/src/sequence.rs index 8b41bf9f94..911bccfc2f 100644 --- a/crates/astria-sequencer/src/sequence.rs +++ b/crates/astria-sequencer/src/sequence.rs @@ -3,7 +3,7 @@ use anyhow::{ Context, Result, }; -use proto::native::sequencer::v1alpha1::{ +use astria_core::sequencer::v1alpha1::{ asset, Address, SequenceAction, diff --git a/crates/astria-sequencer/src/service/consensus.rs b/crates/astria-sequencer/src/service/consensus.rs index 4328e8c56d..2a00838646 100644 --- a/crates/astria-sequencer/src/service/consensus.rs +++ b/crates/astria-sequencer/src/service/consensus.rs @@ -230,21 +230,19 @@ impl Consensus { mod test { use std::str::FromStr; + use astria_core::sequencer::v1alpha1::{ + asset::DEFAULT_NATIVE_ASSET_DENOM, + Address, + RollupId, + SequenceAction, + UnsignedTransaction, + }; use bytes::Bytes; use ed25519_consensus::{ SigningKey, VerificationKey, }; - use proto::{ - native::sequencer::v1alpha1::{ - asset::DEFAULT_NATIVE_ASSET_DENOM, - Address, - RollupId, - SequenceAction, - UnsignedTransaction, - }, - Message as _, - }; + use prost::Message as _; use rand::rngs::OsRng; use tendermint::{ account::Id, diff --git a/crates/astria-sequencer/src/service/info/mod.rs b/crates/astria-sequencer/src/service/info/mod.rs index 48fe14fc98..da153dccac 100644 --- a/crates/astria-sequencer/src/service/info/mod.rs +++ b/crates/astria-sequencer/src/service/info/mod.rs @@ -146,14 +146,14 @@ impl Service for Info { #[cfg(test)] mod test { - use cnidarium::StateDelta; - use proto::native::sequencer::{ + use astria_core::sequencer::{ asset::{ Denom, DEFAULT_NATIVE_ASSET_DENOM, }, v1alpha1::Address, }; + use cnidarium::StateDelta; use tendermint::v0_37::abci::{ request, InfoRequest, diff --git a/crates/astria-sequencer/src/service/mempool.rs b/crates/astria-sequencer/src/service/mempool.rs index 8d2692746a..53586a7fa6 100644 --- a/crates/astria-sequencer/src/service/mempool.rs +++ b/crates/astria-sequencer/src/service/mempool.rs @@ -72,11 +72,11 @@ async fn handle_check_tx( req: request::CheckTx, state: S, ) -> response::CheckTx { - use proto::{ + use astria_core::{ generated::sequencer::v1alpha1 as raw, - native::sequencer::v1alpha1::SignedTransaction, - Message as _, + sequencer::v1alpha1::SignedTransaction, }; + use prost::Message as _; use sequencer_types::abci_code::AbciCode; use crate::transaction; diff --git a/crates/astria-sequencer/src/transaction/action_handler.rs b/crates/astria-sequencer/src/transaction/action_handler.rs index ca65a85577..4f04575f7a 100644 --- a/crates/astria-sequencer/src/transaction/action_handler.rs +++ b/crates/astria-sequencer/src/transaction/action_handler.rs @@ -1,13 +1,13 @@ use anyhow::Result; +use astria_core::sequencer::v1alpha1::{ + asset, + Address, +}; use async_trait::async_trait; use cnidarium::{ StateRead, StateWrite, }; -use proto::native::sequencer::v1alpha1::{ - asset, - Address, -}; #[async_trait] pub(crate) trait ActionHandler { diff --git a/crates/astria-sequencer/src/transaction/mod.rs b/crates/astria-sequencer/src/transaction/mod.rs index c558152569..e356b1b0d7 100644 --- a/crates/astria-sequencer/src/transaction/mod.rs +++ b/crates/astria-sequencer/src/transaction/mod.rs @@ -9,7 +9,7 @@ use anyhow::{ ensure, Context as _, }; -use proto::native::sequencer::v1alpha1::{ +use astria_core::sequencer::v1alpha1::{ asset, Action, Address, diff --git a/tools/protobuf-compiler/src/main.rs b/tools/protobuf-compiler/src/main.rs index bd0c60fca2..f017d30c44 100644 --- a/tools/protobuf-compiler/src/main.rs +++ b/tools/protobuf-compiler/src/main.rs @@ -1,5 +1,8 @@ use std::{ - collections::HashMap, + collections::{ + HashMap, + HashSet, + }, env, ffi::OsStr, fs::{ @@ -15,7 +18,7 @@ use std::{ process::Command, }; -const OUT_DIR: &str = "../../crates/astria-proto/src/proto/generated"; +const OUT_DIR: &str = "../../crates/astria-core/src/generated"; const SRC_DIR: &str = "../../proto"; const INCLUDES: &[&str] = &[SRC_DIR]; @@ -96,12 +99,14 @@ fn emit_buf_stderr(buf: &[u8]) -> std::io::Result<()> { } fn clean_non_astria_code(generated: &mut ContentMap) { - let foreign_file_names: Vec<_> = generated + let mut foreign_file_names: HashSet<_> = generated .files .keys() .filter(|name| !name.starts_with("astria.")) .cloned() .collect(); + // also mask mod.rs because we need are defining it + foreign_file_names.remove("mod.rs"); for name in foreign_file_names { let _ = generated.codes.remove(&name); let file = generated