Skip to content

Commit

Permalink
feat: forest-tool openrpc shed <path> (#4497)
Browse files Browse the repository at this point in the history
  • Loading branch information
aatifsyed authored Jul 10, 2024
1 parent 80a701a commit 671f117
Show file tree
Hide file tree
Showing 20 changed files with 250 additions and 300 deletions.
21 changes: 11 additions & 10 deletions src/rpc/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use serde::de::DeserializeOwned;
use tracing::{debug, Instrument, Level};
use url::Url;

use super::{ApiVersion, Request, MAX_REQUEST_BODY_SIZE, MAX_RESPONSE_BODY_SIZE};
use super::{ApiPath, ApiPaths, Request, MAX_REQUEST_BODY_SIZE, MAX_RESPONSE_BODY_SIZE};

/// A JSON-RPC client that can dispatch either a [`crate::rpc::Request`] to a single URL.
pub struct Client {
Expand Down Expand Up @@ -75,12 +75,12 @@ impl Client {
let Request {
method_name,
params,
api_version,
api_paths,
timeout,
..
} = req;

let client = self.get_or_init_client(api_version).await?;
let client = self.get_or_init_client(api_paths).await?;
let span = tracing::debug_span!("request", method = %method_name, url = %client.url);
let work = async {
// jsonrpsee's clients have a global `timeout`, but not a per-request timeout, which
Expand Down Expand Up @@ -129,17 +129,18 @@ impl Client {
};
work.instrument(span.or_current()).await
}
async fn get_or_init_client(&self, version: ApiVersion) -> Result<&UrlClient, ClientError> {
match version {
ApiVersion::V0 => &self.v0,
ApiVersion::V1 => &self.v1,
async fn get_or_init_client(&self, version: ApiPaths) -> Result<&UrlClient, ClientError> {
let path = ApiPaths::max(&version);
match path {
ApiPath::V0 => &self.v0,
ApiPath::V1 => &self.v1,
}
.get_or_try_init(|| async {
let url = self
.base_url
.join(match version {
ApiVersion::V0 => "rpc/v0",
ApiVersion::V1 => "rpc/v1",
.join(match path {
ApiPath::V0 => "rpc/v0",
ApiPath::V1 => "rpc/v1",
})
.map_err(|it| {
ClientError::Custom(format!("creating url for endpoint failed: {}", it))
Expand Down
6 changes: 3 additions & 3 deletions src/rpc/methods/auth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

use crate::auth::*;
use crate::lotus_json::lotus_json_with_self;
use crate::rpc::{ApiVersion, Ctx, Permission, RpcMethod, ServerError};
use crate::rpc::{ApiPaths, Ctx, Permission, RpcMethod, ServerError};
use anyhow::Result;
use chrono::Duration;
use fvm_ipld_blockstore::Blockstore;
Expand All @@ -16,7 +16,7 @@ pub enum AuthNew {}
impl RpcMethod<1> for AuthNew {
const NAME: &'static str = "Filecoin.AuthNew";
const PARAM_NAMES: [&'static str; 1] = ["params"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Admin;
type Params = (AuthNewParams,);
type Ok = Vec<u8>;
Expand All @@ -35,7 +35,7 @@ pub enum AuthVerify {}
impl RpcMethod<1> for AuthVerify {
const NAME: &'static str = "Filecoin.AuthVerify";
const PARAM_NAMES: [&'static str; 1] = ["header_raw"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;
type Params = (String,);
type Ok = Vec<String>;
Expand Down
4 changes: 2 additions & 2 deletions src/rpc/methods/beacon.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright 2019-2024 ChainSafe Systems
// SPDX-License-Identifier: Apache-2.0, MIT

use crate::rpc::{ApiVersion, Ctx, Permission, RpcMethod, ServerError};
use crate::rpc::{ApiPaths, Ctx, Permission, RpcMethod, ServerError};
use crate::{beacon::BeaconEntry, shim::clock::ChainEpoch};
use anyhow::Result;
use fvm_ipld_blockstore::Blockstore;
Expand All @@ -13,7 +13,7 @@ pub enum BeaconGetEntry {}
impl RpcMethod<1> for BeaconGetEntry {
const NAME: &'static str = "Filecoin.BeaconGetEntry";
const PARAM_NAMES: [&'static str; 1] = ["first"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (ChainEpoch,);
Expand Down
40 changes: 20 additions & 20 deletions src/rpc/methods/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::lotus_json::{assert_all_snapshots, assert_unchanged_via_json};
use crate::lotus_json::{lotus_json_with_self, HasLotusJson, LotusJson};
use crate::message::{ChainMessage, SignedMessage};
use crate::rpc::types::ApiTipsetKey;
use crate::rpc::{ApiVersion, Ctx, Permission, RpcMethod, ServerError};
use crate::rpc::{ApiPaths, Ctx, Permission, RpcMethod, ServerError};
use crate::shim::clock::ChainEpoch;
use crate::shim::error::ExitCode;
use crate::shim::executor::Receipt;
Expand Down Expand Up @@ -48,7 +48,7 @@ pub enum ChainGetMessage {}
impl RpcMethod<1> for ChainGetMessage {
const NAME: &'static str = "Filecoin.ChainGetMessage";
const PARAM_NAMES: [&'static str; 1] = ["msg_cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid,);
Expand All @@ -74,7 +74,7 @@ pub enum ChainGetParentMessages {}
impl RpcMethod<1> for ChainGetParentMessages {
const NAME: &'static str = "Filecoin.ChainGetParentMessages";
const PARAM_NAMES: [&'static str; 1] = ["block_cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid,);
Expand All @@ -101,7 +101,7 @@ pub enum ChainGetParentReceipts {}
impl RpcMethod<1> for ChainGetParentReceipts {
const NAME: &'static str = "Filecoin.ChainGetParentReceipts";
const PARAM_NAMES: [&'static str; 1] = ["block_cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid,);
Expand Down Expand Up @@ -146,7 +146,7 @@ pub enum ChainGetMessagesInTipset {}
impl RpcMethod<1> for ChainGetMessagesInTipset {
const NAME: &'static str = "Filecoin.ChainGetMessagesInTipset";
const PARAM_NAMES: [&'static str; 1] = ["tsk"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (ApiTipsetKey,);
Expand All @@ -165,7 +165,7 @@ pub enum ChainExport {}
impl RpcMethod<1> for ChainExport {
const NAME: &'static str = "Filecoin.ChainExport";
const PARAM_NAMES: [&'static str; 1] = ["params"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (ChainExportParams,);
Expand Down Expand Up @@ -238,7 +238,7 @@ pub enum ChainReadObj {}
impl RpcMethod<1> for ChainReadObj {
const NAME: &'static str = "Filecoin.ChainReadObj";
const PARAM_NAMES: [&'static str; 1] = ["cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid,);
Expand All @@ -261,7 +261,7 @@ pub enum ChainHasObj {}
impl RpcMethod<1> for ChainHasObj {
const NAME: &'static str = "Filecoin.ChainHasObj";
const PARAM_NAMES: [&'static str; 1] = ["cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid,);
Expand All @@ -281,7 +281,7 @@ pub enum ChainStatObj {}
impl RpcMethod<2> for ChainStatObj {
const NAME: &'static str = "Filecoin.ChainStatObj";
const PARAM_NAMES: [&'static str; 2] = ["obj_cid", "base_cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid, Option<Cid>);
Expand Down Expand Up @@ -333,7 +333,7 @@ pub enum ChainGetBlockMessages {}
impl RpcMethod<1> for ChainGetBlockMessages {
const NAME: &'static str = "Filecoin.ChainGetBlockMessages";
const PARAM_NAMES: [&'static str; 1] = ["cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid,);
Expand Down Expand Up @@ -367,7 +367,7 @@ pub enum ChainGetPath {}
impl RpcMethod<2> for ChainGetPath {
const NAME: &'static str = "Filecoin.ChainGetPath";
const PARAM_NAMES: [&'static str; 2] = ["from", "to"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (TipsetKey, TipsetKey);
Expand Down Expand Up @@ -444,7 +444,7 @@ pub enum ChainGetTipSetByHeight {}
impl RpcMethod<2> for ChainGetTipSetByHeight {
const NAME: &'static str = "Filecoin.ChainGetTipSetByHeight";
const PARAM_NAMES: [&'static str; 2] = ["height", "tsk"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (ChainEpoch, ApiTipsetKey);
Expand All @@ -471,7 +471,7 @@ pub enum ChainGetTipSetAfterHeight {}
impl RpcMethod<2> for ChainGetTipSetAfterHeight {
const NAME: &'static str = "Filecoin.ChainGetTipSetAfterHeight";
const PARAM_NAMES: [&'static str; 2] = ["height", "tsk"];
const API_VERSION: ApiVersion = ApiVersion::V1;
const API_PATHS: ApiPaths = ApiPaths::V1;
const PERMISSION: Permission = Permission::Read;

type Params = (ChainEpoch, ApiTipsetKey);
Expand All @@ -498,7 +498,7 @@ pub enum ChainGetGenesis {}
impl RpcMethod<0> for ChainGetGenesis {
const NAME: &'static str = "Filecoin.ChainGetGenesis";
const PARAM_NAMES: [&'static str; 0] = [];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = ();
Expand All @@ -514,7 +514,7 @@ pub enum ChainHead {}
impl RpcMethod<0> for ChainHead {
const NAME: &'static str = "Filecoin.ChainHead";
const PARAM_NAMES: [&'static str; 0] = [];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = ();
Expand All @@ -530,7 +530,7 @@ pub enum ChainGetBlock {}
impl RpcMethod<1> for ChainGetBlock {
const NAME: &'static str = "Filecoin.ChainGetBlock";
const PARAM_NAMES: [&'static str; 1] = ["cid"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (Cid,);
Expand All @@ -549,7 +549,7 @@ pub enum ChainGetTipSet {}
impl RpcMethod<1> for ChainGetTipSet {
const NAME: &'static str = "Filecoin.ChainGetTipSet";
const PARAM_NAMES: [&'static str; 1] = ["tsk"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (ApiTipsetKey,);
Expand All @@ -571,7 +571,7 @@ pub enum ChainSetHead {}
impl RpcMethod<1> for ChainSetHead {
const NAME: &'static str = "Filecoin.ChainSetHead";
const PARAM_NAMES: [&'static str; 1] = ["tsk"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Admin;

type Params = (ApiTipsetKey,);
Expand Down Expand Up @@ -613,7 +613,7 @@ pub enum ChainGetMinBaseFee {}
impl RpcMethod<1> for ChainGetMinBaseFee {
const NAME: &'static str = "Filecoin.ChainGetMinBaseFee";
const PARAM_NAMES: [&'static str; 1] = ["lookback"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Admin;

type Params = (u32,);
Expand Down Expand Up @@ -646,7 +646,7 @@ pub enum ChainTipSetWeight {}
impl RpcMethod<1> for ChainTipSetWeight {
const NAME: &'static str = "Filecoin.ChainTipSetWeight";
const PARAM_NAMES: [&'static str; 1] = ["tsk"];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = (ApiTipsetKey,);
Expand Down
10 changes: 5 additions & 5 deletions src/rpc/methods/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

use crate::lotus_json::lotus_json_with_self;
use crate::rpc::error::ServerError;
use crate::rpc::{ApiVersion, Ctx, Permission, RpcMethod};
use crate::rpc::{ApiPaths, Ctx, Permission, RpcMethod};
use fvm_ipld_blockstore::Blockstore;
use once_cell::sync::Lazy;
use schemars::JsonSchema;
Expand All @@ -18,7 +18,7 @@ pub enum Session {}
impl RpcMethod<0> for Session {
const NAME: &'static str = "Filecoin.Session";
const PARAM_NAMES: [&'static str; 0] = [];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = ();
Expand All @@ -33,7 +33,7 @@ pub enum Version {}
impl RpcMethod<0> for Version {
const NAME: &'static str = "Filecoin.Version";
const PARAM_NAMES: [&'static str; 0] = [];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = ();
Expand All @@ -53,7 +53,7 @@ pub enum Shutdown {}
impl RpcMethod<0> for Shutdown {
const NAME: &'static str = "Filecoin.Shutdown";
const PARAM_NAMES: [&'static str; 0] = [];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Admin;

type Params = ();
Expand All @@ -69,7 +69,7 @@ pub enum StartTime {}
impl RpcMethod<0> for StartTime {
const NAME: &'static str = "Filecoin.StartTime";
const PARAM_NAMES: [&'static str; 0] = [];
const API_VERSION: ApiVersion = ApiVersion::V0;
const API_PATHS: ApiPaths = ApiPaths::V0;
const PERMISSION: Permission = Permission::Read;

type Params = ();
Expand Down
Loading

0 comments on commit 671f117

Please sign in to comment.