Skip to content

Commit cb88533

Browse files
authored
Refactor IMP and VCMP errors (#1516)
* refactor IMP errors * adjust tests * a bit more test fix * refactor vcmp errors * Vc -> VC * adjust ts-test * minor comment * small fix * update comment * try to fix test error * try to forcibly stringify
1 parent 07ab55b commit cb88533

File tree

40 files changed

+450
-439
lines changed

40 files changed

+450
-439
lines changed

pallets/identity-management-mock/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ pub mod pallet {
181181
IdentityAlreadyVerified,
182182
/// identity not exist when removing an identity
183183
IdentityNotExist,
184-
/// identity should be disallowed
185-
IdentityShouldBeDisallowed,
184+
/// creating the prime identity manually is disallowed
185+
CreatePrimeIdentityNotAllowed,
186186
/// no shielding key for a given AccountId
187187
ShieldingKeyNotExist,
188188
/// a verification reqeust comes too early
@@ -321,7 +321,7 @@ pub mod pallet {
321321
.try_into()
322322
.map_err(|_| DispatchError::Other("invalid account id"))?;
323323
let user_address: Address32 = address_raw.into();
324-
ensure!(user_address != address, Error::<T>::IdentityShouldBeDisallowed);
324+
ensure!(user_address != address, Error::<T>::CreatePrimeIdentityNotAllowed);
325325
}
326326
}
327327
let metadata = match encrypted_metadata {

pallets/identity-management/src/lib.rs

Lines changed: 17 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@
3535
mod benchmarking;
3636
#[cfg(test)]
3737
mod mock;
38-
39-
#[cfg(all(test, feature = "skip-ias-check"))]
38+
#[cfg(test)]
4039
mod tests;
4140

4241
pub mod weights;
@@ -50,7 +49,7 @@ use sp_std::vec::Vec;
5049
#[frame_support::pallet]
5150
pub mod pallet {
5251
use super::{AesOutput, ShardIdentifier, Vec, WeightInfo};
53-
use core_primitives::{ErrorString, IMPError};
52+
use core_primitives::{ErrorDetail, IMPError};
5453
use frame_support::pallet_prelude::*;
5554
use frame_system::pallet_prelude::*;
5655

@@ -88,24 +87,12 @@ pub mod pallet {
8887
// event errors caused by processing in TEE
8988
// copied from core_primitives::IMPError, we use events instead of pallet::errors,
9089
// see https://github.com/litentry/litentry-parachain/issues/1275
91-
DecodeHexFailed { reason: ErrorString },
92-
HttpRequestFailed { reason: ErrorString },
93-
StfError { reason: ErrorString },
94-
CreateIdentityHandlingFailed,
95-
RemoveIdentityHandlingFailed,
96-
VerifyIdentityHandlingFailed,
97-
SetUserShieldingKeyHandlingFailed,
98-
InvalidUserShieldingKey,
99-
InvalidIdentity,
100-
WrongWeb2Handle,
101-
UnexpectedMessage,
102-
WrongIdentityHandleType,
103-
WrongSignatureType,
104-
VerifySubstrateSignatureFailed,
105-
RecoverSubstratePubkeyFailed,
106-
VerifyEvmSignatureFailed,
107-
RecoverEvmAddressFailed,
90+
SetUserShieldingKeyFailed { detail: ErrorDetail },
91+
CreateIdentityFailed { detail: ErrorDetail },
92+
RemoveIdentityFailed { detail: ErrorDetail },
93+
VerifyIdentityFailed { detail: ErrorDetail },
10894
ImportScheduledEnclaveFailed,
95+
UnclassifiedError { detail: ErrorDetail },
10996
}
11097

11198
/// delegatees who are authorised to send extrinsics(currently only `create_identity`)
@@ -265,37 +252,18 @@ pub mod pallet {
265252
pub fn some_error(origin: OriginFor<T>, error: IMPError) -> DispatchResultWithPostInfo {
266253
let _ = T::TEECallOrigin::ensure_origin(origin)?;
267254
match error {
268-
IMPError::DecodeHexFailed(s) =>
269-
Self::deposit_event(Event::DecodeHexFailed { reason: s }),
270-
IMPError::HttpRequestFailed(s) =>
271-
Self::deposit_event(Event::HttpRequestFailed { reason: s }),
272-
IMPError::StfError(s) => Self::deposit_event(Event::StfError { reason: s }),
273-
IMPError::InvalidUserShieldingKey =>
274-
Self::deposit_event(Event::InvalidUserShieldingKey),
275-
IMPError::InvalidIdentity => Self::deposit_event(Event::InvalidIdentity),
276-
IMPError::CreateIdentityHandlingFailed =>
277-
Self::deposit_event(Event::CreateIdentityHandlingFailed),
278-
IMPError::RemoveIdentityHandlingFailed =>
279-
Self::deposit_event(Event::RemoveIdentityHandlingFailed),
280-
IMPError::VerifyIdentityHandlingFailed =>
281-
Self::deposit_event(Event::VerifyIdentityHandlingFailed),
282-
IMPError::SetUserShieldingKeyHandlingFailed =>
283-
Self::deposit_event(Event::SetUserShieldingKeyHandlingFailed),
284-
IMPError::WrongWeb2Handle => Self::deposit_event(Event::WrongWeb2Handle),
285-
IMPError::UnexpectedMessage => Self::deposit_event(Event::UnexpectedMessage),
286-
IMPError::WrongIdentityHandleType =>
287-
Self::deposit_event(Event::WrongIdentityHandleType),
288-
IMPError::WrongSignatureType => Self::deposit_event(Event::WrongSignatureType),
289-
IMPError::VerifySubstrateSignatureFailed =>
290-
Self::deposit_event(Event::VerifySubstrateSignatureFailed),
291-
IMPError::RecoverSubstratePubkeyFailed =>
292-
Self::deposit_event(Event::RecoverSubstratePubkeyFailed),
293-
IMPError::VerifyEvmSignatureFailed =>
294-
Self::deposit_event(Event::VerifyEvmSignatureFailed),
295-
IMPError::RecoverEvmAddressFailed =>
296-
Self::deposit_event(Event::RecoverEvmAddressFailed),
255+
IMPError::SetUserShieldingKeyFailed(detail) =>
256+
Self::deposit_event(Event::SetUserShieldingKeyFailed { detail }),
257+
IMPError::CreateIdentityFailed(detail) =>
258+
Self::deposit_event(Event::CreateIdentityFailed { detail }),
259+
IMPError::RemoveIdentityFailed(detail) =>
260+
Self::deposit_event(Event::RemoveIdentityFailed { detail }),
261+
IMPError::VerifyIdentityFailed(detail) =>
262+
Self::deposit_event(Event::VerifyIdentityFailed { detail }),
297263
IMPError::ImportScheduledEnclaveFailed =>
298264
Self::deposit_event(Event::ImportScheduledEnclaveFailed),
265+
IMPError::UnclassifiedError(detail) =>
266+
Self::deposit_event(Event::UnclassifiedError { detail }),
299267
}
300268
Ok(Pays::No.into())
301269
}

pallets/identity-management/src/tests.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@
1515
// along with Litentry. If not, see <https://www.gnu.org/licenses/>.
1616

1717
use crate::{mock::*, Error, ShardIdentifier};
18-
use core_primitives::IMPError;
18+
use core_primitives::{ErrorDetail, IMPError};
1919
use frame_support::{assert_noop, assert_ok};
2020
use sp_core::H256;
2121

2222
const TEST_MRENCLAVE: [u8; 32] = [2u8; 32];
23-
// copied from https://github.com/integritee-network/pallets/blob/5b0706e8b9f726d81d8aff74efbae8e023e783b7/test-utils/src/ias.rs#L147
24-
const URL: &[u8] = &[119, 115, 58, 47, 47, 49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 57, 57, 57, 49];
2523

2624
#[test]
2725
fn set_user_shielding_key_works() {
@@ -121,7 +119,11 @@ fn verify_identity_works() {
121119
}
122120

123121
#[test]
122+
#[cfg(feature = "skip-ias-check")]
124123
fn tee_callback_with_registered_enclave_works() {
124+
// copied from https://github.com/integritee-network/pallets/blob/5b0706e8b9f726d81d8aff74efbae8e023e783b7/test-utils/src/ias.rs#L147
125+
const URL: &[u8] =
126+
&[119, 115, 58, 47, 47, 49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 57, 57, 57, 49];
125127
new_test_ext().execute_with(|| {
126128
assert_ok!(Teerex::register_enclave(
127129
RuntimeOrigin::signed(1),
@@ -133,17 +135,22 @@ fn tee_callback_with_registered_enclave_works() {
133135

134136
assert_ok!(IdentityManagement::some_error(
135137
RuntimeOrigin::signed(1),
136-
IMPError::WrongWeb2Handle
138+
IMPError::VerifyIdentityFailed(ErrorDetail::WrongWeb2Handle)
139+
));
140+
System::assert_last_event(RuntimeEvent::IdentityManagement(
141+
crate::Event::VerifyIdentityFailed { detail: ErrorDetail::WrongWeb2Handle },
137142
));
138-
System::assert_last_event(RuntimeEvent::IdentityManagement(crate::Event::WrongWeb2Handle));
139143
});
140144
}
141145

142146
#[test]
143147
fn tee_callback_with_unregistered_enclave_fails() {
144148
new_test_ext().execute_with(|| {
145149
assert_noop!(
146-
IdentityManagement::some_error(RuntimeOrigin::signed(1), IMPError::WrongWeb2Handle),
150+
IdentityManagement::some_error(
151+
RuntimeOrigin::signed(1),
152+
IMPError::VerifyIdentityFailed(ErrorDetail::WrongWeb2Handle)
153+
),
147154
sp_runtime::DispatchError::BadOrigin,
148155
);
149156
});

pallets/vc-management/src/lib.rs

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ pub type VCIndex = H256;
4848
#[frame_support::pallet]
4949
pub mod pallet {
5050
use super::*;
51-
use core_primitives::{ErrorString, VCMPError};
51+
use core_primitives::{ErrorDetail, VCMPError};
5252
use frame_support::pallet_prelude::*;
5353
use frame_system::pallet_prelude::*;
5454

@@ -107,22 +107,10 @@ pub mod pallet {
107107
// a Schema is revoked
108108
SchemaRevoked { account: T::AccountId, shard: ShardIdentifier, index: SchemaIndex },
109109
// event errors caused by processing in TEE
110-
// copied from core_primitives::IMPError, we use events instead of pallet::errors,
110+
// copied from core_primitives::VCMPError, we use events instead of pallet::errors,
111111
// see https://github.com/litentry/litentry-parachain/issues/1275
112-
HttpRequestFailed { reason: ErrorString },
113-
RequestVCHandlingFailed,
114-
StfError { reason: ErrorString },
115-
ParseError,
116-
Assertion1Failed,
117-
Assertion2Failed,
118-
Assertion3Failed,
119-
Assertion4Failed,
120-
Assertion5Failed,
121-
Assertion6Failed,
122-
Assertion7Failed,
123-
Assertion8Failed,
124-
Assertion10Failed,
125-
Assertion11Failed,
112+
RequestVCFailed { assertion: Assertion, detail: ErrorDetail },
113+
UnclassifiedError { detail: ErrorDetail },
126114
}
127115

128116
#[pallet::error]
@@ -213,22 +201,10 @@ pub mod pallet {
213201
pub fn some_error(origin: OriginFor<T>, error: VCMPError) -> DispatchResultWithPostInfo {
214202
let _ = T::TEECallOrigin::ensure_origin(origin)?;
215203
match error {
216-
VCMPError::HttpRequestFailed(s) =>
217-
Self::deposit_event(Event::HttpRequestFailed { reason: s }),
218-
VCMPError::RequestVCHandlingFailed =>
219-
Self::deposit_event(Event::RequestVCHandlingFailed),
220-
VCMPError::StfError(s) => Self::deposit_event(Event::StfError { reason: s }),
221-
VCMPError::ParseError => Self::deposit_event(Event::ParseError),
222-
VCMPError::Assertion1Failed => Self::deposit_event(Event::Assertion1Failed),
223-
VCMPError::Assertion2Failed => Self::deposit_event(Event::Assertion2Failed),
224-
VCMPError::Assertion3Failed => Self::deposit_event(Event::Assertion3Failed),
225-
VCMPError::Assertion4Failed => Self::deposit_event(Event::Assertion4Failed),
226-
VCMPError::Assertion5Failed => Self::deposit_event(Event::Assertion5Failed),
227-
VCMPError::Assertion6Failed => Self::deposit_event(Event::Assertion6Failed),
228-
VCMPError::Assertion7Failed => Self::deposit_event(Event::Assertion7Failed),
229-
VCMPError::Assertion8Failed => Self::deposit_event(Event::Assertion8Failed),
230-
VCMPError::Assertion10Failed => Self::deposit_event(Event::Assertion10Failed),
231-
VCMPError::Assertion11Failed => Self::deposit_event(Event::Assertion11Failed),
204+
VCMPError::RequestVCFailed(assertion, detail) =>
205+
Self::deposit_event(Event::RequestVCFailed { assertion, detail }),
206+
VCMPError::UnclassifiedError(detail) =>
207+
Self::deposit_event(Event::UnclassifiedError { detail }),
232208
}
233209
Ok(Pays::No.into())
234210
}

primitives/core/src/assertion.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@ use codec::{Decode, Encode, MaxEncodedLen};
2222
use scale_info::TypeInfo;
2323
use sp_runtime::{traits::ConstU32, BoundedVec};
2424

25-
// pub type Balance = u128;
2625
type MaxStringLength = ConstU32<64>;
2726
pub type ParameterString = BoundedVec<u8, MaxStringLength>;
2827
pub type Network = BoundedVec<u8, MaxStringLength>;
2928
pub type AssertionNetworks = BoundedVec<Network, MaxStringLength>;
3029

30+
#[rustfmt::skip]
3131
#[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, TypeInfo, MaxEncodedLen)]
3232
pub enum Assertion {
3333
A1,
34-
A2(ParameterString), // (guild_id)
35-
A3(ParameterString, ParameterString, ParameterString), // (guild_id, channel_id, role_id)
36-
A4(Balance), // (minimum_amount)
37-
A5(ParameterString, ParameterString), // (twitter_account, tweet_id)
34+
A2(ParameterString), // (guild_id)
35+
A3(ParameterString, ParameterString, ParameterString), // (guild_id, channel_id, role_id)
36+
A4(Balance), // (minimum_amount)
37+
A5(ParameterString, ParameterString), // (twitter_account, tweet_id)
3838
A6,
39-
A7(Balance), // (minimum_amount)
40-
A8(AssertionNetworks), // litentry, litmus, polkadot, kusama, khala, ethereum
39+
A7(Balance), // (minimum_amount)
40+
A8(AssertionNetworks), // litentry, litmus, polkadot, kusama, khala, ethereum
4141
A9,
42-
A10(Balance), // (minimum_amount)
43-
A11(Balance), // (minimum_amount)
44-
A13(u32), // (Karma_amount) - TODO: unsupported
42+
A10(Balance), // (minimum_amount)
43+
A11(Balance), // (minimum_amount)
44+
A13(u32), // (Karma_amount) - TODO: unsupported
4545
}
4646

4747
pub const ASSERTION_NETWORKS: [&str; 6] =

primitives/core/src/error.rs

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,42 +14,54 @@
1414
// You should have received a copy of the GNU General Public License
1515
// along with Litentry. If not, see <https://www.gnu.org/licenses/>.
1616

17+
use crate::Assertion;
1718
use codec::{Decode, Encode, MaxEncodedLen};
1819
use scale_info::TypeInfo;
1920
use sp_runtime::{traits::ConstU32, BoundedVec};
2021

2122
pub type MaxStringLength = ConstU32<100>;
2223
pub type ErrorString = BoundedVec<u8, MaxStringLength>;
2324

24-
// Identity Management Pallet Error
2525
#[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, TypeInfo, MaxEncodedLen)]
26-
pub enum IMPError {
27-
// UTF8Error,
28-
DecodeHexFailed(ErrorString),
29-
HttpRequestFailed(ErrorString),
30-
// tee stf error
26+
pub enum ErrorDetail {
27+
// error when importing the parentchain blocks and executing indirect calls
28+
ImportError,
29+
// generic error when executing STF, the `ErrorString` should indicate the actual reasons
3130
StfError(ErrorString),
32-
// schedued encalve import error
33-
ImportScheduledEnclaveFailed,
34-
// Indirect call handling errors when importing parachain blocks
35-
CreateIdentityHandlingFailed,
36-
RemoveIdentityHandlingFailed,
37-
VerifyIdentityHandlingFailed,
38-
SetUserShieldingKeyHandlingFailed,
39-
40-
// identity verification errors
41-
InvalidUserShieldingKey,
31+
// error when sending stf request to the receiver
32+
SendStfRequestFailed,
33+
ChallengeCodeNotFound,
34+
UserShieldingKeyNotFound,
35+
// generic parse error, can be caused by UTF8/JSON serde..
36+
ParseError,
37+
// errors when verifying identities
38+
DecodeHexPayloadFailed(ErrorString),
39+
HttpRequestFailed(ErrorString),
4240
InvalidIdentity,
4341
WrongWeb2Handle,
4442
UnexpectedMessage,
45-
WrongIdentityHandleType,
4643
WrongSignatureType,
4744
VerifySubstrateSignatureFailed,
48-
RecoverSubstratePubkeyFailed,
4945
VerifyEvmSignatureFailed,
5046
RecoverEvmAddressFailed,
5147
}
5248

49+
// Identity Management Pallet Error
50+
#[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, TypeInfo, MaxEncodedLen)]
51+
pub enum IMPError {
52+
// errors when executing individual error
53+
SetUserShieldingKeyFailed(ErrorDetail),
54+
CreateIdentityFailed(ErrorDetail),
55+
RemoveIdentityFailed(ErrorDetail),
56+
VerifyIdentityFailed(ErrorDetail),
57+
// scheduled encalve import error
58+
ImportScheduledEnclaveFailed,
59+
60+
// should be unreached, but just to be on the safe side
61+
// we should classify the error if we ever get this
62+
UnclassifiedError(ErrorDetail),
63+
}
64+
5365
impl frame_support::traits::PalletError for IMPError {
5466
// max_encoded_len
5567
const MAX_ENCODED_SIZE: usize = 1;
@@ -58,22 +70,8 @@ impl frame_support::traits::PalletError for IMPError {
5870
// Verified Credential(VC) Management Pallet Error
5971
#[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, TypeInfo, MaxEncodedLen)]
6072
pub enum VCMPError {
61-
HttpRequestFailed(ErrorString),
62-
// Indirect call handling errors when importing parachain blocks
63-
RequestVCHandlingFailed,
64-
// tee stf error
65-
StfError(ErrorString),
66-
// UTF8Error
67-
ParseError,
68-
// Assertion
69-
Assertion1Failed,
70-
Assertion2Failed,
71-
Assertion3Failed,
72-
Assertion4Failed,
73-
Assertion5Failed,
74-
Assertion6Failed,
75-
Assertion7Failed,
76-
Assertion8Failed,
77-
Assertion10Failed,
78-
Assertion11Failed,
73+
RequestVCFailed(Assertion, ErrorDetail),
74+
// should be unreached, but just to be on the safe side
75+
// we should classify the error if we ever get this
76+
UnclassifiedError(ErrorDetail),
7977
}

0 commit comments

Comments
 (0)