diff --git a/Cargo.toml b/Cargo.toml
index 6928443f9..a76d4b1e0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -66,10 +66,11 @@ alloy-sol-types = { version = "0.8.12", default-features = false }
alloy-primitives = { version = "0.8.12", default-features = false }
# Maili
-maili-provider = { version = "0.1.0", default-features = false }
-maili-protocol = { version = "0.1.0", default-features = false }
-maili-registry = { version = "0.1.0", default-features = false }
-maili-rpc-types-engine = { version = "0.1.0", default-features = false }
+maili-provider = { version = "0.1.1", default-features = false }
+maili-protocol = { version = "0.1.1", default-features = false }
+maili-registry = { version = "0.1.1", default-features = false }
+maili-rpc-jsonrpsee = { version = "0.1.1", default-features = false }
+maili-rpc-types-engine = { version = "0.1.1", default-features = false }
# Revm
revm = "19.0.0"
diff --git a/crates/rpc-jsonrpsee/Cargo.toml b/crates/rpc-jsonrpsee/Cargo.toml
index 47e14b7c3..ed91ea38f 100644
--- a/crates/rpc-jsonrpsee/Cargo.toml
+++ b/crates/rpc-jsonrpsee/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "op-alloy-rpc-jsonrpsee"
-description = "Optimism RPC Client"
+description = "Re-export of maili-rpc-jsonrpsee"
version.workspace = true
edition.workspace = true
@@ -15,25 +15,9 @@ exclude.workspace = true
workspace = true
[dependencies]
-# Alloy
-op-alloy-rpc-types.workspace = true
-op-alloy-rpc-types-engine = { workspace = true, features = ["serde"] }
-op-alloy-protocol.workspace = true
-alloy-eips.workspace = true
-alloy-primitives.workspace = true
-
-# rpc
-jsonrpsee.workspace = true
+maili-rpc-jsonrpsee = { workspace = true, default-features = false }
[features]
default = ["std"]
-std = [
- "op-alloy-rpc-types/std",
- "op-alloy-rpc-types-engine/std",
- "alloy-eips/std",
- "alloy-primitives/std",
-]
-client = [
- "jsonrpsee/client",
- "jsonrpsee/async-client",
-]
+std = ["maili-rpc-jsonrpsee/std"]
+client = ["maili-rpc-jsonrpsee/client"]
diff --git a/crates/rpc-jsonrpsee/README.md b/crates/rpc-jsonrpsee/README.md
index 6eb7eb9ea..1ea5e71d3 100644
--- a/crates/rpc-jsonrpsee/README.md
+++ b/crates/rpc-jsonrpsee/README.md
@@ -7,4 +7,6 @@
-Low-level Optimism JSON-RPC server and client implementations.
+See [maili-rpc-jsonrpsee]
+
+[maili-rpc-jsonrpsee]: https://github.com/op-rs/maili/blob/main/crates/rpc-jsonrpsee/README.md
diff --git a/crates/rpc-jsonrpsee/src/lib.rs b/crates/rpc-jsonrpsee/src/lib.rs
index dd08fe389..cc98fa056 100644
--- a/crates/rpc-jsonrpsee/src/lib.rs
+++ b/crates/rpc-jsonrpsee/src/lib.rs
@@ -7,6 +7,4 @@
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
#![cfg_attr(not(feature = "std"), no_std)]
-extern crate alloc;
-
-pub mod traits;
+pub use maili_rpc_jsonrpsee::*;
diff --git a/crates/rpc-jsonrpsee/src/traits.rs b/crates/rpc-jsonrpsee/src/traits.rs
deleted file mode 100644
index 50347d80c..000000000
--- a/crates/rpc-jsonrpsee/src/traits.rs
+++ /dev/null
@@ -1,162 +0,0 @@
-#![allow(missing_docs)]
-
-//! Rollup Node
-
-use alloc::{boxed::Box, string::String, vec::Vec};
-use core::net::IpAddr;
-
-use alloy_eips::BlockNumberOrTag;
-use alloy_primitives::{B256, U64};
-use jsonrpsee::{core::RpcResult, proc_macros::rpc};
-use op_alloy_protocol::{ExecutingMessage, SafetyLevel};
-use op_alloy_rpc_types::{
- OutputResponse, PeerDump, PeerInfo, PeerStats, RollupConfig, SafeHeadResponse, SyncStatus,
-};
-use op_alloy_rpc_types_engine::{ProtocolVersion, SuperchainSignal};
-
-/// Optimism specified rpc interface.
-///
-/// https://docs.optimism.io/builders/node-operators/json-rpc
-/// https://github.com/ethereum-optimism/optimism/blob/8dd17a7b114a7c25505cd2e15ce4e3d0f7e3f7c1/op-node/node/api.go#L114
-#[cfg_attr(not(feature = "client"), rpc(server, namespace = "optimism"))]
-#[cfg_attr(feature = "client", rpc(server, client, namespace = "optimism"))]
-pub trait RollupNode {
- /// Get the output root at a specific block.
- #[method(name = "outputAtBlock")]
- async fn op_output_at_block(&self, block_number: BlockNumberOrTag)
- -> RpcResult;
-
- /// Gets the safe head at an L1 block height.
- #[method(name = "safeHeadAtL1Block")]
- async fn op_safe_head_at_l1_block(
- &self,
- block_number: BlockNumberOrTag,
- ) -> RpcResult;
-
- /// Get the synchronization status.
- #[method(name = "syncStatus")]
- async fn op_sync_status(&self) -> RpcResult;
-
- /// Get the rollup configuration parameters.
- #[method(name = "rollupConfig")]
- async fn op_rollup_config(&self) -> RpcResult;
-
- /// Get the software version.
- #[method(name = "version")]
- async fn op_version(&self) -> RpcResult;
-}
-
-/// The opp2p namespace handles peer interactions.
-#[cfg_attr(not(feature = "client"), rpc(server, namespace = "opp2p"))]
-#[cfg_attr(feature = "client", rpc(server, client, namespace = "opp2p"))]
-pub trait OpP2PApi {
- /// Returns information of node
- #[method(name = "self")]
- async fn opp2p_self(&self) -> RpcResult;
-
- #[method(name = "peers")]
- async fn opp2p_peers(&self) -> RpcResult;
-
- #[method(name = "peerStats")]
- async fn opp2p_peer_stats(&self) -> RpcResult;
-
- #[method(name = "discoveryTable")]
- async fn opp2p_discovery_table(&self) -> RpcResult>;
-
- #[method(name = "blockPeer")]
- async fn opp2p_block_peer(&self, peer: String) -> RpcResult<()>;
-
- #[method(name = "listBlockedPeers")]
- async fn opp2p_list_blocked_peers(&self) -> RpcResult>;
-
- #[method(name = "blocAddr")]
- async fn opp2p_block_addr(&self, ip: IpAddr) -> RpcResult<()>;
-
- #[method(name = "unblockAddr")]
- async fn opp2p_unblock_addr(&self, ip: IpAddr) -> RpcResult<()>;
-
- #[method(name = "listBlockedAddrs")]
- async fn opp2p_list_blocked_addrs(&self) -> RpcResult>;
-
- /// todo: should be IPNet?
- #[method(name = "blockSubnet")]
- async fn opp2p_block_subnet(&self, subnet: String) -> RpcResult<()>;
-
- /// todo: should be IPNet?
- #[method(name = "unblockSubnet")]
- async fn opp2p_unblock_subnet(&self, subnet: String) -> RpcResult<()>;
-
- /// todo: should be IPNet?
- #[method(name = "listBlockedSubnets")]
- async fn opp2p_list_blocked_subnets(&self) -> RpcResult>;
-
- #[method(name = "protectPeer")]
- async fn opp2p_protect_peer(&self, peer: String) -> RpcResult<()>;
-
- #[method(name = "unprotectPeer")]
- async fn opp2p_unprotect_peer(&self, peer: String) -> RpcResult<()>;
-
- #[method(name = "connectPeer")]
- async fn opp2p_connect_peer(&self, peer: String) -> RpcResult<()>;
-
- #[method(name = "disconnectPeer")]
- async fn opp2p_disconnect_peer(&self, peer: String) -> RpcResult<()>;
-}
-
-/// The admin namespace endpoints
-/// https://github.com/ethereum-optimism/optimism/blob/c7ad0ebae5dca3bf8aa6f219367a95c15a15ae41/op-node/node/api.go#L28-L36
-#[cfg_attr(not(feature = "client"), rpc(server, namespace = "admin"))]
-#[cfg_attr(feature = "client", rpc(server, client, namespace = "admin"))]
-pub trait OpAdminApi {
- #[method(name = "resetDerivationPipeline")]
- async fn admin_reset_derivation_pipeline(&self) -> RpcResult<()>;
-
- #[method(name = "startSequencer")]
- async fn admin_start_sequencer(&self, block_hash: B256) -> RpcResult<()>;
-
- #[method(name = "stopSequencer")]
- async fn admin_stop_sequencer(&self) -> RpcResult;
-
- #[method(name = "sequencerActive")]
- async fn admin_sequencer_active(&self) -> RpcResult;
-}
-
-/// Engine API extension for Optimism superchain signaling
-#[cfg_attr(not(feature = "client"), rpc(server, namespace = "engine"))]
-#[cfg_attr(feature = "client", rpc(server, client, namespace = "engine"))]
-pub trait EngineApiExt {
- /// Signal superchain v1 message
- ///
- /// The execution engine SHOULD warn when the recommended version is newer than the current
- /// version. The execution engine SHOULD take safety precautions if it does not meet
- /// the required version.
- ///
- /// # Returns
- /// The latest supported OP-Stack protocol version of the execution engine.
- ///
- /// See:
- #[method(name = "signalSuperchainV1")]
- async fn signal_superchain_v1(&self, signal: SuperchainSignal) -> RpcResult;
-}
-
-/// Op API extension for controlling the miner.
-#[cfg_attr(not(feature = "client"), rpc(server, namespace = "miner"))]
-#[cfg_attr(feature = "client", rpc(server, client, namespace = "miner"))]
-pub trait MinerApiExt {
- /// Sets the maximum data availability size of any tx allowed in a block, and the total max l1
- /// data size of the block. 0 means no maximum.
- #[method(name = "setMaxDASize")]
- async fn set_max_da_size(&self, max_tx_size: U64, max_block_size: U64) -> RpcResult;
-}
-
-/// Supervisor API for interop.
-#[rpc(client, namespace = "supervisor")]
-pub trait SupervisorApi {
- /// Checks if the given messages meet the given minimum safety level.
- #[method(name = "checkMessages")]
- async fn check_messages(
- &self,
- messages: Vec,
- min_safety: SafetyLevel,
- ) -> RpcResult<()>;
-}