Skip to content

Commit

Permalink
Revert "chore: Remove rpc-jsonrpsee Crate (#376)"
Browse files Browse the repository at this point in the history
This reverts commit 835c340.
  • Loading branch information
mattsse committed Jan 22, 2025
1 parent f4dd91c commit be74ce1
Show file tree
Hide file tree
Showing 11 changed files with 238 additions and 0 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ op-alloy-network = { version = "0.9.5", path = "crates/network", default-feature
op-alloy-provider = { version = "0.9.5", path = "crates/provider", default-features = false }
op-alloy-rpc-types = { version = "0.9.5", path = "crates/rpc-types", default-features = false }
op-alloy-rpc-types-engine = { version = "0.9.5", path = "crates/rpc-types-engine", default-features = false }
op-alloy-rpc-jsonrpsee = { version = "0.9.5", path = "crates/rpc-jsonrpsee", default-features = false }

# Alloy
alloy-eips = { version = "0.9.2", default-features = false }
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ The following crates are provided by `op-alloy`.

- [`op-alloy-consensus`][op-alloy-consensus]
- [`op-alloy-network`][op-alloy-network]
- [`op-alloy-rpc-jsonrpsee`][op-alloy-rpc-jsonrpsee]
- [`op-alloy-rpc-types-engine`][op-alloy-rpc-types-engine]
- [`op-alloy-rpc-types`][op-alloy-rpc-types]

Expand Down Expand Up @@ -88,5 +89,6 @@ shall be dual licensed as above, without any additional terms or conditions.

[op-alloy-consensus]: https://crates.io/crates/op-alloy-consensus
[op-alloy-network]: https://crates.io/crates/op-alloy-network
[op-alloy-rpc-jsonrpsee]: https://crates.io/crates/op-alloy-rpc-jsonrpsee
[op-alloy-rpc-types-engine]: https://crates.io/crates/op-alloy-rpc-types-engine
[op-alloy-rpc-types]: https://crates.io/crates/op-alloy-rpc-types
1 change: 1 addition & 0 deletions book/src/links.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
[op-alloy-consensus]: https://crates.io/crates/op-alloy-consensus
[op-alloy-network]: https://crates.io/crates/op-alloy-network
[op-alloy-provider]: https://crates.io/crates/op-alloy-provider
[op-alloy-rpc-jsonrpsee]: https://crates.io/crates/op-alloy-rpc-jsonrpsee
[op-alloy-rpc-types-engine]: https://crates.io/crates/op-alloy-rpc-types-engine
[op-alloy-rpc-types]: https://crates.io/crates/op-alloy-rpc-types

Expand Down
1 change: 1 addition & 0 deletions book/src/starting.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ so `op-alloy-consensus` types can be used from `op-alloy` through `op_alloy::con
- [`op-alloy-network`][op-alloy-network]
- [`op-alloy-provider`][op-alloy-protocol]
- [`op-alloy-consensus`][op-alloy-consensus] (supports `no_std`)
- [`op-alloy-rpc-jsonrpsee`][op-alloy-rpc-jsonrpsee]
- [`op-alloy-rpc-types`][op-alloy-rpc-types] (supports `no_std`)
- [`op-alloy-rpc-types-engine`][op-alloy-rpc-types-engine] (supports `no_std`)

Expand Down
3 changes: 3 additions & 0 deletions crates/op-alloy/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ workspace = true
op-alloy-consensus = { workspace = true, optional = true }
op-alloy-provider = { workspace = true, optional = true }
op-alloy-network = { workspace = true, optional = true }
op-alloy-rpc-jsonrpsee = { workspace = true, optional = true }
op-alloy-rpc-types-engine = { workspace = true, optional = true }
op-alloy-rpc-types = { workspace = true, optional = true }

Expand All @@ -39,6 +40,7 @@ full = [
"network",
"rpc-types",
"rpc-types-engine",
"rpc-jsonrpsee",
]

k256 = [
Expand All @@ -63,4 +65,5 @@ rpc-types-engine = ["dep:op-alloy-rpc-types-engine"]

# std features
network = ["dep:op-alloy-network"]
rpc-jsonrpsee = ["dep:op-alloy-rpc-jsonrpsee"]
provider = ["dep:op-alloy-provider"]
1 change: 1 addition & 0 deletions crates/op-alloy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,5 +87,6 @@ shall be dual licensed as above, without any additional terms or conditions.

[op-alloy-consensus]: https://crates.io/crates/op-alloy-consensus
[op-alloy-network]: https://crates.io/crates/op-alloy-network
[op-alloy-rpc-jsonrpsee]: https://crates.io/crates/op-alloy-rpc-jsonrpsee
[op-alloy-rpc-types-engine]: https://crates.io/crates/op-alloy-rpc-types-engine
[op-alloy-rpc-types]: https://crates.io/crates/op-alloy-rpc-types
4 changes: 4 additions & 0 deletions crates/op-alloy/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,7 @@ pub use op_alloy_rpc_types as rpc_types;
#[cfg(feature = "rpc-types-engine")]
#[doc(inline)]
pub use op_alloy_rpc_types_engine as rpc_types_engine;

#[cfg(feature = "rpc-jsonrpsee")]
#[doc(inline)]
pub use op_alloy_rpc_jsonrpsee as rpc_jsonrpsee;
41 changes: 41 additions & 0 deletions crates/rpc-jsonrpsee/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[package]
name = "op-alloy-rpc-jsonrpsee"
description = "Optimism RPC Client"

version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
homepage.workspace = true
authors.workspace = true
repository.workspace = true
exclude.workspace = true

[lints]
workspace = true

[dependencies]
# Alloy
op-alloy-rpc-types.workspace = true
op-alloy-rpc-types-engine = { workspace = true, features = ["serde"] }
alloy-eips.workspace = true
alloy-primitives.workspace = true

# Maili
maili-protocol.workspace = true

# rpc
jsonrpsee.workspace = true

[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",
]
10 changes: 10 additions & 0 deletions crates/rpc-jsonrpsee/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## `op-alloy-rpc-jsonrpsee`

<a href="https://github.com/alloy-rs/op-alloy/actions/workflows/ci.yml"><img src="https://github.com/alloy-rs/op-alloy/actions/workflows/ci.yml/badge.svg?label=ci" alt="CI"></a>
<a href="https://crates.io/crates/op-alloy-rpc-jsonrpsee"><img src="https://img.shields.io/crates/v/op-alloy-rpc-jsonrpsee.svg" alt="op-alloy-rpc-jsonrpsee crate"></a>
<a href="https://github.com/alloy-rs/op-alloy/blob/main/LICENSE-MIT"><img src="https://img.shields.io/badge/License-MIT-d1d1f6.svg?label=license&labelColor=2a2f35" alt="MIT License"></a>
<a href="https://github.com/alloy-rs/op-alloy/blob/main/LICENSE-APACHE"><img src="https://img.shields.io/badge/License-APACHE-d1d1f6.svg?label=license&labelColor=2a2f35" alt="Apache License"></a>
<a href="https://alloy-rs.github.io/op-alloy"><img src="https://img.shields.io/badge/Book-854a15?logo=mdBook&labelColor=2a2f35" alt="Book"></a>


Low-level Optimism JSON-RPC server and client implementations.
12 changes: 12 additions & 0 deletions crates/rpc-jsonrpsee/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#![doc = include_str!("../README.md")]
#![doc(
html_logo_url = "https://raw.githubusercontent.com/alloy-rs/core/main/assets/alloy.jpg",
html_favicon_url = "https://raw.githubusercontent.com/alloy-rs/core/main/assets/favicon.ico"
)]
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
#![cfg_attr(not(feature = "std"), no_std)]

extern crate alloc;

pub mod traits;
162 changes: 162 additions & 0 deletions crates/rpc-jsonrpsee/src/traits.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
#![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 maili_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<OutputResponse>;

/// 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<SafeHeadResponse>;

/// Get the synchronization status.
#[method(name = "syncStatus")]
async fn op_sync_status(&self) -> RpcResult<SyncStatus>;

/// Get the rollup configuration parameters.
#[method(name = "rollupConfig")]
async fn op_rollup_config(&self) -> RpcResult<RollupConfig>;

/// Get the software version.
#[method(name = "version")]
async fn op_version(&self) -> RpcResult<String>;
}

/// 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<PeerInfo>;

#[method(name = "peers")]
async fn opp2p_peers(&self) -> RpcResult<PeerDump>;

#[method(name = "peerStats")]
async fn opp2p_peer_stats(&self) -> RpcResult<PeerStats>;

#[method(name = "discoveryTable")]
async fn opp2p_discovery_table(&self) -> RpcResult<Vec<String>>;

#[method(name = "blockPeer")]
async fn opp2p_block_peer(&self, peer: String) -> RpcResult<()>;

#[method(name = "listBlockedPeers")]
async fn opp2p_list_blocked_peers(&self) -> RpcResult<Vec<String>>;

#[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<Vec<IpAddr>>;

/// 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<Vec<String>>;

#[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<B256>;

#[method(name = "sequencerActive")]
async fn admin_sequencer_active(&self) -> RpcResult<bool>;
}

/// 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: <https://specs.optimism.io/protocol/exec-engine.html#engine_signalsuperchainv1>
#[method(name = "signalSuperchainV1")]
async fn signal_superchain_v1(&self, signal: SuperchainSignal) -> RpcResult<ProtocolVersion>;
}

/// 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<bool>;
}

/// 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<ExecutingMessage>,
min_safety: SafetyLevel,
) -> RpcResult<()>;
}

0 comments on commit be74ce1

Please sign in to comment.