v0.2.5-pre.009
This commit is contained in:
@@ -1,281 +1,5 @@
|
||||
// file: crates/ksp-onchain-transport-lib/src/rpc_method.rs
|
||||
// version: 2
|
||||
|
||||
/// Functional category used by the audited Solana HTTP JSON-RPC registry.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum HttpRpcCategory {
|
||||
/// Account state and rent queries.
|
||||
Accounts,
|
||||
/// SPL token-oriented RPC queries exposed by the standard Solana HTTP surface.
|
||||
Tokens,
|
||||
/// Transaction, signature, fee, simulation and submission methods.
|
||||
Transactions,
|
||||
/// Block, slot-history and performance-sample methods.
|
||||
Blocks,
|
||||
/// Cluster identity, epoch, leader, health and validator methods.
|
||||
Cluster,
|
||||
/// Supply, inflation and stake-economics methods.
|
||||
Economics,
|
||||
/// Historically documented methods removed from the targeted Agave runtime generation.
|
||||
Historical,
|
||||
}
|
||||
|
||||
/// Documentation lifecycle status of one audited RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcDocumentationStatus {
|
||||
/// The method is documented as stable.
|
||||
Stable,
|
||||
/// The method is documented as deprecated or obsolete.
|
||||
Deprecated,
|
||||
/// The method is documented as unstable or experimental.
|
||||
Unstable,
|
||||
}
|
||||
|
||||
impl RpcDocumentationStatus {
|
||||
/// Returns the stable machine-readable status code.
|
||||
#[must_use]
|
||||
pub const fn code(self) -> &'static str {
|
||||
return match self {
|
||||
Self::Stable => "stable",
|
||||
Self::Deprecated => "deprecated",
|
||||
Self::Unstable => "unstable",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Runtime availability status of one audited RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcRuntimeStatus {
|
||||
/// The targeted runtime generation still supports the method.
|
||||
Supported,
|
||||
/// The method is historically documented but removed from the targeted runtime generation.
|
||||
Removed,
|
||||
}
|
||||
|
||||
impl RpcRuntimeStatus {
|
||||
/// Returns the stable machine-readable runtime status code.
|
||||
#[must_use]
|
||||
pub const fn code(self) -> &'static str {
|
||||
return match self {
|
||||
Self::Supported => "supported",
|
||||
Self::Removed => "removed",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Request-form policy attached to a stable RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcRequestFormStatus {
|
||||
/// Only the currently documented stable request form is tracked by KSP.
|
||||
Stable,
|
||||
/// The method is stable but also has a documented deprecated legacy request form that must warn when explicitly used.
|
||||
StableWithDeprecatedLegacy,
|
||||
}
|
||||
|
||||
impl RpcRequestFormStatus {
|
||||
/// Returns whether the method has a documented deprecated legacy request form.
|
||||
#[must_use]
|
||||
pub const fn has_deprecated_legacy(self) -> bool {
|
||||
return match self {
|
||||
Self::Stable => false,
|
||||
Self::StableWithDeprecatedLegacy => true,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Technical operation kind used to separate reads, simulations and submissions.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcOperationKind {
|
||||
/// Read-only RPC operation.
|
||||
Read,
|
||||
/// Simulation operation that does not submit a transaction for execution.
|
||||
Simulation,
|
||||
/// Technical write/submission operation whose ambiguous post-dispatch outcome must not be resent automatically.
|
||||
WriteSubmission,
|
||||
}
|
||||
|
||||
/// HTTP transport retry classification attached to an RPC method descriptor.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum TransportRetryClass {
|
||||
/// The identical transport request may be retried when the transport failure is classified as retryable.
|
||||
RetrySafe,
|
||||
/// The request must not be resent automatically after an ambiguous dispatch.
|
||||
NeverAfterDispatch,
|
||||
/// Retry classification does not apply because the method is not callable on the targeted runtime.
|
||||
NotApplicable,
|
||||
}
|
||||
|
||||
/// Release that owns the typed KSP coverage for one audited current HTTP method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum HttpRpcCoverageRelease {
|
||||
/// `0.2.1` HTTP foundation and four canary methods.
|
||||
V0_2_1,
|
||||
/// `0.2.2` Accounts + Tokens + remaining Cluster methods.
|
||||
V0_2_2,
|
||||
/// `0.2.3` Transactions methods.
|
||||
V0_2_3,
|
||||
/// `0.2.4` Blocks + Economics methods and final HTTP compliance.
|
||||
V0_2_4,
|
||||
/// Historical registry entry with no callable typed release.
|
||||
Historical,
|
||||
}
|
||||
|
||||
/// Immutable audited descriptor for one Solana HTTP JSON-RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub struct HttpRpcMethodDescriptor {
|
||||
method: &'static str,
|
||||
category: crate::HttpRpcCategory,
|
||||
request_kind: &'static str,
|
||||
documentation_status: crate::RpcDocumentationStatus,
|
||||
runtime_status: crate::RpcRuntimeStatus,
|
||||
request_form_status: crate::RpcRequestFormStatus,
|
||||
operation_kind: crate::RpcOperationKind,
|
||||
transport_retry_class: crate::TransportRetryClass,
|
||||
replacement: std::option::Option<&'static str>,
|
||||
coverage_release: crate::HttpRpcCoverageRelease,
|
||||
}
|
||||
|
||||
impl HttpRpcMethodDescriptor {
|
||||
const fn new(
|
||||
method: &'static str,
|
||||
category: crate::HttpRpcCategory,
|
||||
request_kind: &'static str,
|
||||
documentation_status: crate::RpcDocumentationStatus,
|
||||
runtime_status: crate::RpcRuntimeStatus,
|
||||
request_form_status: crate::RpcRequestFormStatus,
|
||||
operation_kind: crate::RpcOperationKind,
|
||||
transport_retry_class: crate::TransportRetryClass,
|
||||
replacement: std::option::Option<&'static str>,
|
||||
coverage_release: crate::HttpRpcCoverageRelease,
|
||||
) -> Self {
|
||||
return Self {
|
||||
method,
|
||||
category,
|
||||
request_kind,
|
||||
documentation_status,
|
||||
runtime_status,
|
||||
request_form_status,
|
||||
operation_kind,
|
||||
transport_retry_class,
|
||||
replacement,
|
||||
coverage_release,
|
||||
};
|
||||
}
|
||||
|
||||
/// Returns the exact JSON-RPC method name.
|
||||
#[must_use]
|
||||
pub const fn method(&self) -> &'static str {
|
||||
return self.method;
|
||||
}
|
||||
|
||||
/// Returns the audited functional category.
|
||||
#[must_use]
|
||||
pub const fn category(&self) -> crate::HttpRpcCategory {
|
||||
return self.category;
|
||||
}
|
||||
|
||||
/// Returns the stable open request-kind descriptor used by future endpoint role matching.
|
||||
#[must_use]
|
||||
pub const fn request_kind(&self) -> &'static str {
|
||||
return self.request_kind;
|
||||
}
|
||||
|
||||
/// Returns the method documentation lifecycle status.
|
||||
#[must_use]
|
||||
pub const fn documentation_status(&self) -> crate::RpcDocumentationStatus {
|
||||
return self.documentation_status;
|
||||
}
|
||||
|
||||
/// Returns runtime availability on the targeted Agave generation.
|
||||
#[must_use]
|
||||
pub const fn runtime_status(&self) -> crate::RpcRuntimeStatus {
|
||||
return self.runtime_status;
|
||||
}
|
||||
|
||||
/// Returns the request-form policy, including whether a documented deprecated legacy form exists.
|
||||
#[must_use]
|
||||
pub const fn request_form_status(&self) -> crate::RpcRequestFormStatus {
|
||||
return self.request_form_status;
|
||||
}
|
||||
|
||||
/// Returns the technical operation kind.
|
||||
#[must_use]
|
||||
pub const fn operation_kind(&self) -> crate::RpcOperationKind {
|
||||
return self.operation_kind;
|
||||
}
|
||||
|
||||
/// Returns the transport retry classification.
|
||||
#[must_use]
|
||||
pub const fn transport_retry_class(&self) -> crate::TransportRetryClass {
|
||||
return self.transport_retry_class;
|
||||
}
|
||||
|
||||
/// Returns the documented replacement or migration direction when one exists.
|
||||
#[must_use]
|
||||
pub const fn replacement(&self) -> std::option::Option<&'static str> {
|
||||
return self.replacement;
|
||||
}
|
||||
|
||||
/// Returns the release assigned to typed KSP coverage.
|
||||
#[must_use]
|
||||
pub const fn coverage_release(&self) -> crate::HttpRpcCoverageRelease {
|
||||
return self.coverage_release;
|
||||
}
|
||||
|
||||
/// Returns whether calling the method itself must emit a lifecycle warning when runtime support exists.
|
||||
#[must_use]
|
||||
pub const fn requires_method_usage_warning(&self) -> bool {
|
||||
return match self.runtime_status {
|
||||
crate::RpcRuntimeStatus::Removed => false,
|
||||
crate::RpcRuntimeStatus::Supported => match self.documentation_status {
|
||||
crate::RpcDocumentationStatus::Stable => false,
|
||||
crate::RpcDocumentationStatus::Deprecated | crate::RpcDocumentationStatus::Unstable => true,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/// Checks runtime support and centrally emits the KSP warning required for deprecated, unstable or removed methods.
|
||||
///
|
||||
/// Removed methods return [`crate::ERROR_CODE_METHOD_REMOVED`] and are never presented as callable standard RPC operations.
|
||||
pub fn ensure_runtime_supported(&self) -> ksp_core_lib::Result<()> {
|
||||
if self.runtime_status == crate::RpcRuntimeStatus::Removed {
|
||||
let replacement = match self.replacement {
|
||||
std::option::Option::Some(replacement) => replacement,
|
||||
std::option::Option::None => "none",
|
||||
};
|
||||
ksp_logging_lib::warn!(
|
||||
target: crate::TRACING_TARGET,
|
||||
rpc_method = self.method,
|
||||
documentation_status = self.documentation_status.code(),
|
||||
runtime_status = self.runtime_status.code(),
|
||||
replacement,
|
||||
"removed Solana HTTP RPC method requested"
|
||||
);
|
||||
let mut error = ksp_core_lib::Error::new(crate::ERROR_CODE_METHOD_REMOVED, "Solana HTTP RPC method is removed from the targeted runtime")
|
||||
.with_context("rpc_method", self.method)
|
||||
.with_context("documentation_status", self.documentation_status.code());
|
||||
if let std::option::Option::Some(replacement) = self.replacement {
|
||||
error = error.with_context("replacement", replacement);
|
||||
}
|
||||
return std::result::Result::Err(error);
|
||||
}
|
||||
if self.requires_method_usage_warning() {
|
||||
let replacement = match self.replacement {
|
||||
std::option::Option::Some(replacement) => replacement,
|
||||
std::option::Option::None => "none",
|
||||
};
|
||||
ksp_logging_lib::warn!(
|
||||
target: crate::TRACING_TARGET,
|
||||
rpc_method = self.method,
|
||||
documentation_status = self.documentation_status.code(),
|
||||
runtime_status = self.runtime_status.code(),
|
||||
replacement,
|
||||
"non-stable Solana HTTP RPC method requested"
|
||||
);
|
||||
}
|
||||
return std::result::Result::Ok(());
|
||||
}
|
||||
}
|
||||
// version: 3
|
||||
|
||||
const CURRENT_HTTP_RPC_METHODS: [crate::HttpRpcMethodDescriptor; 52] = [
|
||||
crate::HttpRpcMethodDescriptor::new(
|
||||
@@ -1075,6 +799,282 @@ const HISTORICAL_HTTP_RPC_METHODS: [crate::HttpRpcMethodDescriptor; 14] = [
|
||||
),
|
||||
];
|
||||
|
||||
/// Functional category used by the audited Solana HTTP JSON-RPC registry.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum HttpRpcCategory {
|
||||
/// Account state and rent queries.
|
||||
Accounts,
|
||||
/// SPL token-oriented RPC queries exposed by the standard Solana HTTP surface.
|
||||
Tokens,
|
||||
/// Transaction, signature, fee, simulation and submission methods.
|
||||
Transactions,
|
||||
/// Block, slot-history and performance-sample methods.
|
||||
Blocks,
|
||||
/// Cluster identity, epoch, leader, health and validator methods.
|
||||
Cluster,
|
||||
/// Supply, inflation and stake-economics methods.
|
||||
Economics,
|
||||
/// Historically documented methods removed from the targeted Agave runtime generation.
|
||||
Historical,
|
||||
}
|
||||
|
||||
/// Documentation lifecycle status of one audited RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcDocumentationStatus {
|
||||
/// The method is documented as stable.
|
||||
Stable,
|
||||
/// The method is documented as deprecated or obsolete.
|
||||
Deprecated,
|
||||
/// The method is documented as unstable or experimental.
|
||||
Unstable,
|
||||
}
|
||||
|
||||
impl RpcDocumentationStatus {
|
||||
/// Returns the stable machine-readable status code.
|
||||
#[must_use]
|
||||
pub const fn code(self) -> &'static str {
|
||||
return match self {
|
||||
Self::Stable => "stable",
|
||||
Self::Deprecated => "deprecated",
|
||||
Self::Unstable => "unstable",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Runtime availability status of one audited RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcRuntimeStatus {
|
||||
/// The targeted runtime generation still supports the method.
|
||||
Supported,
|
||||
/// The method is historically documented but removed from the targeted runtime generation.
|
||||
Removed,
|
||||
}
|
||||
|
||||
impl RpcRuntimeStatus {
|
||||
/// Returns the stable machine-readable runtime status code.
|
||||
#[must_use]
|
||||
pub const fn code(self) -> &'static str {
|
||||
return match self {
|
||||
Self::Supported => "supported",
|
||||
Self::Removed => "removed",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Request-form policy attached to a stable RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcRequestFormStatus {
|
||||
/// Only the currently documented stable request form is tracked by KSP.
|
||||
Stable,
|
||||
/// The method is stable but also has a documented deprecated legacy request form that must warn when explicitly used.
|
||||
StableWithDeprecatedLegacy,
|
||||
}
|
||||
|
||||
impl RpcRequestFormStatus {
|
||||
/// Returns whether the method has a documented deprecated legacy request form.
|
||||
#[must_use]
|
||||
pub const fn has_deprecated_legacy(self) -> bool {
|
||||
return match self {
|
||||
Self::Stable => false,
|
||||
Self::StableWithDeprecatedLegacy => true,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Technical operation kind used to separate reads, simulations and submissions.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum RpcOperationKind {
|
||||
/// Read-only RPC operation.
|
||||
Read,
|
||||
/// Simulation operation that does not submit a transaction for execution.
|
||||
Simulation,
|
||||
/// Technical write/submission operation whose ambiguous post-dispatch outcome must not be resent automatically.
|
||||
WriteSubmission,
|
||||
}
|
||||
|
||||
/// HTTP transport retry classification attached to an RPC method descriptor.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum TransportRetryClass {
|
||||
/// The identical transport request may be retried when the transport failure is classified as retryable.
|
||||
RetrySafe,
|
||||
/// The request must not be resent automatically after an ambiguous dispatch.
|
||||
NeverAfterDispatch,
|
||||
/// Retry classification does not apply because the method is not callable on the targeted runtime.
|
||||
NotApplicable,
|
||||
}
|
||||
|
||||
/// Release that owns the typed KSP coverage for one audited current HTTP method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub enum HttpRpcCoverageRelease {
|
||||
/// `0.2.1` HTTP foundation and four canary methods.
|
||||
V0_2_1,
|
||||
/// `0.2.2` Accounts + Tokens + remaining Cluster methods.
|
||||
V0_2_2,
|
||||
/// `0.2.3` Transactions methods.
|
||||
V0_2_3,
|
||||
/// `0.2.4` Blocks + Economics methods and final HTTP compliance.
|
||||
V0_2_4,
|
||||
/// Historical registry entry with no callable typed release.
|
||||
Historical,
|
||||
}
|
||||
|
||||
/// Immutable audited descriptor for one Solana HTTP JSON-RPC method.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub struct HttpRpcMethodDescriptor {
|
||||
method: &'static str,
|
||||
category: crate::HttpRpcCategory,
|
||||
request_kind: &'static str,
|
||||
documentation_status: crate::RpcDocumentationStatus,
|
||||
runtime_status: crate::RpcRuntimeStatus,
|
||||
request_form_status: crate::RpcRequestFormStatus,
|
||||
operation_kind: crate::RpcOperationKind,
|
||||
transport_retry_class: crate::TransportRetryClass,
|
||||
replacement: std::option::Option<&'static str>,
|
||||
coverage_release: crate::HttpRpcCoverageRelease,
|
||||
}
|
||||
|
||||
impl HttpRpcMethodDescriptor {
|
||||
const fn new(
|
||||
method: &'static str,
|
||||
category: crate::HttpRpcCategory,
|
||||
request_kind: &'static str,
|
||||
documentation_status: crate::RpcDocumentationStatus,
|
||||
runtime_status: crate::RpcRuntimeStatus,
|
||||
request_form_status: crate::RpcRequestFormStatus,
|
||||
operation_kind: crate::RpcOperationKind,
|
||||
transport_retry_class: crate::TransportRetryClass,
|
||||
replacement: std::option::Option<&'static str>,
|
||||
coverage_release: crate::HttpRpcCoverageRelease,
|
||||
) -> Self {
|
||||
return Self {
|
||||
method,
|
||||
category,
|
||||
request_kind,
|
||||
documentation_status,
|
||||
runtime_status,
|
||||
request_form_status,
|
||||
operation_kind,
|
||||
transport_retry_class,
|
||||
replacement,
|
||||
coverage_release,
|
||||
};
|
||||
}
|
||||
|
||||
/// Returns the exact JSON-RPC method name.
|
||||
#[must_use]
|
||||
pub const fn method(&self) -> &'static str {
|
||||
return self.method;
|
||||
}
|
||||
|
||||
/// Returns the audited functional category.
|
||||
#[must_use]
|
||||
pub const fn category(&self) -> crate::HttpRpcCategory {
|
||||
return self.category;
|
||||
}
|
||||
|
||||
/// Returns the stable open request-kind descriptor used by future endpoint role matching.
|
||||
#[must_use]
|
||||
pub const fn request_kind(&self) -> &'static str {
|
||||
return self.request_kind;
|
||||
}
|
||||
|
||||
/// Returns the method documentation lifecycle status.
|
||||
#[must_use]
|
||||
pub const fn documentation_status(&self) -> crate::RpcDocumentationStatus {
|
||||
return self.documentation_status;
|
||||
}
|
||||
|
||||
/// Returns runtime availability on the targeted Agave generation.
|
||||
#[must_use]
|
||||
pub const fn runtime_status(&self) -> crate::RpcRuntimeStatus {
|
||||
return self.runtime_status;
|
||||
}
|
||||
|
||||
/// Returns the request-form policy, including whether a documented deprecated legacy form exists.
|
||||
#[must_use]
|
||||
pub const fn request_form_status(&self) -> crate::RpcRequestFormStatus {
|
||||
return self.request_form_status;
|
||||
}
|
||||
|
||||
/// Returns the technical operation kind.
|
||||
#[must_use]
|
||||
pub const fn operation_kind(&self) -> crate::RpcOperationKind {
|
||||
return self.operation_kind;
|
||||
}
|
||||
|
||||
/// Returns the transport retry classification.
|
||||
#[must_use]
|
||||
pub const fn transport_retry_class(&self) -> crate::TransportRetryClass {
|
||||
return self.transport_retry_class;
|
||||
}
|
||||
|
||||
/// Returns the documented replacement or migration direction when one exists.
|
||||
#[must_use]
|
||||
pub const fn replacement(&self) -> std::option::Option<&'static str> {
|
||||
return self.replacement;
|
||||
}
|
||||
|
||||
/// Returns the release assigned to typed KSP coverage.
|
||||
#[must_use]
|
||||
pub const fn coverage_release(&self) -> crate::HttpRpcCoverageRelease {
|
||||
return self.coverage_release;
|
||||
}
|
||||
|
||||
/// Returns whether calling the method itself must emit a lifecycle warning when runtime support exists.
|
||||
#[must_use]
|
||||
pub const fn requires_method_usage_warning(&self) -> bool {
|
||||
return match self.runtime_status {
|
||||
crate::RpcRuntimeStatus::Removed => false,
|
||||
crate::RpcRuntimeStatus::Supported => match self.documentation_status {
|
||||
crate::RpcDocumentationStatus::Stable => false,
|
||||
crate::RpcDocumentationStatus::Deprecated | crate::RpcDocumentationStatus::Unstable => true,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/// Checks runtime support and centrally emits the KSP warning required for deprecated, unstable or removed methods.
|
||||
///
|
||||
/// Removed methods return [`crate::ERROR_CODE_METHOD_REMOVED`] and are never presented as callable standard RPC operations.
|
||||
pub fn ensure_runtime_supported(&self) -> ksp_core_lib::Result<()> {
|
||||
if self.runtime_status == crate::RpcRuntimeStatus::Removed {
|
||||
let replacement = match self.replacement {
|
||||
std::option::Option::Some(replacement) => replacement,
|
||||
std::option::Option::None => "none",
|
||||
};
|
||||
ksp_logging_lib::warn!(
|
||||
target: crate::TRACING_TARGET,
|
||||
rpc_method = self.method,
|
||||
documentation_status = self.documentation_status.code(),
|
||||
runtime_status = self.runtime_status.code(),
|
||||
replacement,
|
||||
"removed Solana HTTP RPC method requested"
|
||||
);
|
||||
let mut error = ksp_core_lib::Error::new(crate::ERROR_CODE_METHOD_REMOVED, "Solana HTTP RPC method is removed from the targeted runtime")
|
||||
.with_context("rpc_method", self.method)
|
||||
.with_context("documentation_status", self.documentation_status.code());
|
||||
if let std::option::Option::Some(replacement) = self.replacement {
|
||||
error = error.with_context("replacement", replacement);
|
||||
}
|
||||
return std::result::Result::Err(error);
|
||||
}
|
||||
if self.requires_method_usage_warning() {
|
||||
let replacement = match self.replacement {
|
||||
std::option::Option::Some(replacement) => replacement,
|
||||
std::option::Option::None => "none",
|
||||
};
|
||||
ksp_logging_lib::warn!(
|
||||
target: crate::TRACING_TARGET,
|
||||
rpc_method = self.method,
|
||||
documentation_status = self.documentation_status.code(),
|
||||
runtime_status = self.runtime_status.code(),
|
||||
replacement,
|
||||
"non-stable Solana HTTP RPC method requested"
|
||||
);
|
||||
}
|
||||
return std::result::Result::Ok(());
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns all 52 current Solana HTTP RPC method descriptors audited for the `0.2.1`–`0.2.4` coverage sequence.
|
||||
#[must_use]
|
||||
pub const fn current_http_rpc_methods() -> &'static [crate::HttpRpcMethodDescriptor] {
|
||||
|
||||
Reference in New Issue
Block a user