From dbcac65f329dcd5fa5b503330f9e8fc996747de3 Mon Sep 17 00:00:00 2001 From: "will.li" <120463031+higherordertech@users.noreply.github.com> Date: Fri, 31 May 2024 16:41:23 +1000 Subject: [PATCH] Revert "fix: P-441 remove NoEligibleIdentity (#2739)" (#2777) This reverts commit cfbb47cfe74a7f2c22d28c5950a18e7def3e9745. --- primitives/core/src/error.rs | 4 +++ .../app-libs/stf/src/trusted_call_litentry.rs | 7 +++-- .../interfaces/sidechain/definitions.ts | 1 + .../src/brc20/amount_holder.rs | 30 +++++++++++-------- .../core/assertion-build/src/holding_time.rs | 5 ++++ .../litentry/core/vc-task/receiver/src/lib.rs | 5 +--- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/primitives/core/src/error.rs b/primitives/core/src/error.rs index 4fc4f6b233..4360f364d4 100644 --- a/primitives/core/src/error.rs +++ b/primitives/core/src/error.rs @@ -66,6 +66,9 @@ pub enum ErrorDetail { // of verification data #[codec(index = 10)] VerifyWeb3SignatureFailed, + // error when trying to build vc but no eligible identity is found + #[codec(index = 11)] + NoEligibleIdentity, } impl fmt::Debug for ErrorDetail { @@ -87,6 +90,7 @@ impl fmt::Debug for ErrorDetail { ErrorDetail::WrongWeb2Handle => write!(f, "WrongWeb2Handle"), ErrorDetail::UnexpectedMessage => write!(f, "UnexpectedMessage"), ErrorDetail::VerifyWeb3SignatureFailed => write!(f, "VerifyWeb3SignatureFailed"), + ErrorDetail::NoEligibleIdentity => write!(f, "NoEligibleIdentity"), } } } diff --git a/tee-worker/app-libs/stf/src/trusted_call_litentry.rs b/tee-worker/app-libs/stf/src/trusted_call_litentry.rs index 595fa7d10f..a3b9b23e40 100644 --- a/tee-worker/app-libs/stf/src/trusted_call_litentry.rs +++ b/tee-worker/app-libs/stf/src/trusted_call_litentry.rs @@ -196,9 +196,10 @@ impl TrustedCallSigned { let assertion_networks = assertion.get_supported_web3networks(); let identities = get_eligible_identities(id_graph.as_ref(), assertion_networks); - if identities.is_empty() { - debug!("[RequestVc]: No eligible identities"); - } + ensure!( + !identities.is_empty(), + StfError::RequestVCFailed(assertion, ErrorDetail::NoEligibleIdentity) + ); let parachain_block_number = ParentchainLitentry::block_number(); let sidechain_block_number = System::block_number(); diff --git a/tee-worker/client-api/parachain-api/prepare-build/interfaces/sidechain/definitions.ts b/tee-worker/client-api/parachain-api/prepare-build/interfaces/sidechain/definitions.ts index 6235b21b81..7b1baaa937 100644 --- a/tee-worker/client-api/parachain-api/prepare-build/interfaces/sidechain/definitions.ts +++ b/tee-worker/client-api/parachain-api/prepare-build/interfaces/sidechain/definitions.ts @@ -86,6 +86,7 @@ export default { UnexpectedMessage: "Null", __Unused_WrongSignatureType: "Null", VerifyWeb3SignatureFailed: "Null", + NoEligibleIdentity: "Null", }, }, ShardIdentifier: "H256", diff --git a/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs b/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs index 89b6659740..3d8e8e2086 100644 --- a/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs +++ b/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs @@ -45,17 +45,21 @@ pub fn build( ) })?; - let runtime_version = IssuerRuntimeVersion { - parachain: req.parachain_runtime_version, - sidechain: req.sidechain_runtime_version, - }; - - let mut credential_unsigned = - Credential::new(&req.who, &req.shard, &runtime_version).map_err(|e| { - error!("Generate unsigned credential failed {:?}", e); - Error::RequestVCFailed(Assertion::BRC20AmountHolder, e.into_error_detail()) - })?; - credential_unsigned.update_brc20_amount_holder_credential(&response); - - Ok(credential_unsigned) + if response.is_empty() { + Err(Error::RequestVCFailed(Assertion::BRC20AmountHolder, ErrorDetail::NoEligibleIdentity)) + } else { + let runtime_version = IssuerRuntimeVersion { + parachain: req.parachain_runtime_version, + sidechain: req.sidechain_runtime_version, + }; + + let mut credential_unsigned = Credential::new(&req.who, &req.shard, &runtime_version) + .map_err(|e| { + error!("Generate unsigned credential failed {:?}", e); + Error::RequestVCFailed(Assertion::BRC20AmountHolder, e.into_error_detail()) + })?; + credential_unsigned.update_brc20_amount_holder_credential(&response); + + Ok(credential_unsigned) + } } diff --git a/tee-worker/litentry/core/assertion-build/src/holding_time.rs b/tee-worker/litentry/core/assertion-build/src/holding_time.rs index 07b7a23a74..0ed16f5e74 100644 --- a/tee-worker/litentry/core/assertion-build/src/holding_time.rs +++ b/tee-worker/litentry/core/assertion-build/src/holding_time.rs @@ -86,6 +86,11 @@ pub fn build( let q_min_balance = prepare_min_balance(&htype, &min_balance)?; let accounts = prepare_accounts(&req.identities, &htype); + // Redundant check in principle, but better safe than sorry :) + if accounts.is_empty() { + return Err(emit_error(&htype, &min_balance, ErrorDetail::NoEligibleIdentity)) + } + let holding_date = search_holding_date(data_provider_config, accounts, &q_min_balance) .map_err(|e| emit_error(&htype, &min_balance, e))?; diff --git a/tee-worker/litentry/core/vc-task/receiver/src/lib.rs b/tee-worker/litentry/core/vc-task/receiver/src/lib.rs index 3a5ba0087e..b7eb245b0c 100644 --- a/tee-worker/litentry/core/vc-task/receiver/src/lib.rs +++ b/tee-worker/litentry/core/vc-task/receiver/src/lib.rs @@ -529,10 +529,7 @@ where let id_graph_hash = H256::from(blake2_256(&id_graph.encode())); let assertion_networks = assertion.get_supported_web3networks(); let identities = get_eligible_identities(id_graph.as_ref(), assertion_networks); - - if identities.is_empty() { - debug!("[RequestVc]: No eligible identities"); - } + ensure!(!identities.is_empty(), "No eligible identity".to_string()); let signer_account = signer .to_account_id()