From 881fd1e0dcce44e03dd2dc1c7e8d8eaa71ac862e Mon Sep 17 00:00:00 2001
From: Arkadiy Paronyan <arkady.paronyan@gmail.com>
Date: Fri, 9 Jun 2023 18:24:49 +0200
Subject: [PATCH] Fix RPC error code conflict (#14315)

* Base error code module

* Base error code module

* fmt
---
 substrate/client/rpc-api/src/author/error.rs  |  2 +-
 substrate/client/rpc-api/src/chain/error.rs   |  2 +-
 substrate/client/rpc-api/src/dev/error.rs     |  2 +-
 substrate/client/rpc-api/src/error.rs         | 28 +++++++++++++++++++
 substrate/client/rpc-api/src/lib.rs           |  1 +
 .../client/rpc-api/src/offchain/error.rs      |  2 +-
 substrate/client/rpc-api/src/state/error.rs   |  2 +-
 .../client/rpc-api/src/statement/error.rs     |  2 +-
 substrate/client/rpc-api/src/system/error.rs  |  2 +-
 9 files changed, 36 insertions(+), 7 deletions(-)
 create mode 100644 substrate/client/rpc-api/src/error.rs

diff --git a/substrate/client/rpc-api/src/author/error.rs b/substrate/client/rpc-api/src/author/error.rs
index 8149a1f8d1a..648dbb295d8 100644
--- a/substrate/client/rpc-api/src/author/error.rs
+++ b/substrate/client/rpc-api/src/author/error.rs
@@ -57,7 +57,7 @@ pub enum Error {
 }
 
 /// Base code for all authorship errors.
-const BASE_ERROR: i32 = 1000;
+const BASE_ERROR: i32 = crate::error::base::AUTHOR;
 /// Extrinsic has an invalid format.
 const BAD_FORMAT: i32 = BASE_ERROR + 1;
 /// Error during transaction verification in runtime.
diff --git a/substrate/client/rpc-api/src/chain/error.rs b/substrate/client/rpc-api/src/chain/error.rs
index cfb429bcffd..65219294258 100644
--- a/substrate/client/rpc-api/src/chain/error.rs
+++ b/substrate/client/rpc-api/src/chain/error.rs
@@ -37,7 +37,7 @@ pub enum Error {
 }
 
 /// Base error code for all chain errors.
-const BASE_ERROR: i32 = 3000;
+const BASE_ERROR: i32 = crate::error::base::CHAIN;
 
 impl From<Error> for JsonRpseeError {
 	fn from(e: Error) -> Self {
diff --git a/substrate/client/rpc-api/src/dev/error.rs b/substrate/client/rpc-api/src/dev/error.rs
index 2896e66bc0a..8e4ddb55e35 100644
--- a/substrate/client/rpc-api/src/dev/error.rs
+++ b/substrate/client/rpc-api/src/dev/error.rs
@@ -44,7 +44,7 @@ pub enum Error {
 }
 
 /// Base error code for all dev errors.
-const BASE_ERROR: i32 = 6000;
+const BASE_ERROR: i32 = crate::error::base::DEV;
 
 impl From<Error> for JsonRpseeError {
 	fn from(e: Error) -> Self {
diff --git a/substrate/client/rpc-api/src/error.rs b/substrate/client/rpc-api/src/error.rs
new file mode 100644
index 00000000000..72941e3145b
--- /dev/null
+++ b/substrate/client/rpc-api/src/error.rs
@@ -0,0 +1,28 @@
+// This file is part of Substrate.
+
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+/// Base error code for RPC modules.
+pub mod base {
+	pub const AUTHOR: i32 = 1000;
+	pub const SYSTEM: i32 = 2000;
+	pub const CHAIN: i32 = 3000;
+	pub const STATE: i32 = 4000;
+	pub const OFFCHAIN: i32 = 5000;
+	pub const DEV: i32 = 6000;
+	pub const STATEMENT: i32 = 7000;
+}
diff --git a/substrate/client/rpc-api/src/lib.rs b/substrate/client/rpc-api/src/lib.rs
index 83054584370..b99c237dc85 100644
--- a/substrate/client/rpc-api/src/lib.rs
+++ b/substrate/client/rpc-api/src/lib.rs
@@ -22,6 +22,7 @@
 
 #![warn(missing_docs)]
 
+mod error;
 mod policy;
 
 pub use policy::DenyUnsafe;
diff --git a/substrate/client/rpc-api/src/offchain/error.rs b/substrate/client/rpc-api/src/offchain/error.rs
index 5ca0476087a..679e1000897 100644
--- a/substrate/client/rpc-api/src/offchain/error.rs
+++ b/substrate/client/rpc-api/src/offchain/error.rs
@@ -38,7 +38,7 @@ pub enum Error {
 }
 
 /// Base error code for all offchain errors.
-const BASE_ERROR: i32 = 5000;
+const BASE_ERROR: i32 = crate::error::base::OFFCHAIN;
 
 impl From<Error> for JsonRpseeError {
 	fn from(e: Error) -> Self {
diff --git a/substrate/client/rpc-api/src/state/error.rs b/substrate/client/rpc-api/src/state/error.rs
index c69b3d9199c..9857784e354 100644
--- a/substrate/client/rpc-api/src/state/error.rs
+++ b/substrate/client/rpc-api/src/state/error.rs
@@ -55,7 +55,7 @@ pub enum Error {
 }
 
 /// Base code for all state errors.
-const BASE_ERROR: i32 = 4000;
+const BASE_ERROR: i32 = crate::error::base::STATE;
 
 impl From<Error> for JsonRpseeError {
 	fn from(e: Error) -> Self {
diff --git a/substrate/client/rpc-api/src/statement/error.rs b/substrate/client/rpc-api/src/statement/error.rs
index 549b147115f..8438cc3ec9e 100644
--- a/substrate/client/rpc-api/src/statement/error.rs
+++ b/substrate/client/rpc-api/src/statement/error.rs
@@ -38,7 +38,7 @@ pub enum Error {
 }
 
 /// Base error code for all statement errors.
-const BASE_ERROR: i32 = 6000;
+const BASE_ERROR: i32 = crate::error::base::STATEMENT;
 
 impl From<Error> for JsonRpseeError {
 	fn from(e: Error) -> Self {
diff --git a/substrate/client/rpc-api/src/system/error.rs b/substrate/client/rpc-api/src/system/error.rs
index 4ad0f1b690a..713ade9210d 100644
--- a/substrate/client/rpc-api/src/system/error.rs
+++ b/substrate/client/rpc-api/src/system/error.rs
@@ -39,7 +39,7 @@ pub enum Error {
 }
 
 // Base code for all system errors.
-const BASE_ERROR: i32 = 2000;
+const BASE_ERROR: i32 = crate::error::base::SYSTEM;
 // Provided block range couldn't be resolved to a list of blocks.
 const NOT_HEALTHY_ERROR: i32 = BASE_ERROR + 1;
 // Peer argument is malformatted.
-- 
GitLab