diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 688109732d..23b412e033 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -753,7 +753,6 @@ jobs: - test_name: lit-di-evm-identity-test - test_name: lit-di-bitcoin-identity-test - test_name: lit-di-solana-identity-test - - test_name: lit-di-vc-test - test_name: lit-dr-vc-test - test_name: lit-parentchain-nonce - test_name: lit-test-failed-parentchain-extrinsic @@ -831,7 +830,6 @@ jobs: - test_name: lit-di-evm-identity-multiworker-test - test_name: lit-di-solana-identity-multiworker-test - test_name: lit-di-substrate-identity-multiworker-test - - test_name: lit-di-vc-multiworker-test - test_name: lit-dr-vc-multiworker-test - test_name: lit-resume-worker name: ${{ matrix.test_name }} diff --git a/tee-worker/app-libs/stf/src/trusted_call.rs b/tee-worker/app-libs/stf/src/trusted_call.rs index 3f0277f54b..7f146bcc76 100644 --- a/tee-worker/app-libs/stf/src/trusted_call.rs +++ b/tee-worker/app-libs/stf/src/trusted_call.rs @@ -20,14 +20,12 @@ use sp_core::{H160, U256}; #[cfg(feature = "evm")] use crate::evm_helpers::{create_code_hash, evm_create2_address, evm_create_address}; -#[cfg(feature = "development")] -use crate::helpers::ensure_enclave_signer_or_alice; use crate::{ format, helpers::{enclave_signer_account, ensure_enclave_signer_account, ensure_self}, trusted_call_result::{ - ActivateIdentityResult, DeactivateIdentityResult, RequestVCResult, - SetIdentityNetworksResult, TrustedCallResult, + ActivateIdentityResult, DeactivateIdentityResult, SetIdentityNetworksResult, + TrustedCallResult, }, Arc, Getter, String, ToString, Vec, }; @@ -39,9 +37,7 @@ pub use ita_sgx_runtime::{ Balance, IDGraph, Index, ParentchainInstanceLitentry, ParentchainInstanceTargetA, ParentchainInstanceTargetB, ParentchainLitentry, Runtime, System, VERSION as SIDECHAIN_VERSION, }; -use itp_node_api::metadata::{ - pallet_system::SystemConstants, provider::AccessNodeMetadata, NodeMetadataTrait, -}; +use itp_node_api::metadata::{provider::AccessNodeMetadata, NodeMetadataTrait}; use itp_node_api_metadata::{pallet_imp::IMPCallIndexes, pallet_vcmp::VCMPCallIndexes}; use itp_stf_interface::ExecuteCall; use itp_stf_primitives::{ @@ -133,14 +129,12 @@ pub enum TrustedCall { H256, ), #[codec(index = 21)] - request_vc_callback(Identity, Identity, Assertion, Vec, Option, bool, H256), - #[codec(index = 22)] handle_imp_error(Identity, Option, IMPError, H256), - #[codec(index = 23)] + #[codec(index = 22)] handle_vcmp_error(Identity, Option, VCMPError, H256), - #[codec(index = 24)] + #[codec(index = 23)] send_erroneous_parentchain_call(Identity), - #[codec(index = 25)] + #[codec(index = 24)] maybe_create_id_graph(Identity, Identity), // original integritee trusted calls, starting from index 50 @@ -223,7 +217,6 @@ impl TrustedCall { Self::request_vc(sender_identity, ..) => sender_identity, Self::set_identity_networks(sender_identity, ..) => sender_identity, Self::link_identity_callback(sender_identity, ..) => sender_identity, - Self::request_vc_callback(sender_identity, ..) => sender_identity, Self::handle_imp_error(sender_identity, ..) => sender_identity, Self::handle_vcmp_error(sender_identity, ..) => sender_identity, Self::send_erroneous_parentchain_call(sender_identity) => sender_identity, @@ -239,7 +232,6 @@ impl TrustedCall { Self::link_identity(..) => "link_identity", Self::request_vc(..) => "request_vc", Self::link_identity_callback(..) => "link_identity_callback", - Self::request_vc_callback(..) => "request_vc_callback", Self::handle_vcmp_error(..) => "handle_vcmp_error", Self::handle_imp_error(..) => "handle_imp_error", Self::deactivate_identity(..) => "deactivate_identity", @@ -663,6 +655,7 @@ where debug!("remove_identity, who: {}", account_id_to_string(&who)); let account = signer.to_account_id().ok_or(Self::Error::InvalidAccount)?; + use crate::helpers::ensure_enclave_signer_or_alice; ensure!( ensure_enclave_signer_or_alice(&account), StfError::RemoveIdentityFailed(ErrorDetail::UnauthorizedSigner) @@ -781,109 +774,14 @@ where maybe_key, req_ext_hash, ), - TrustedCall::request_vc(signer, who, assertion, maybe_key, req_ext_hash) => { - debug!( - "request_vc, who: {}, assertion: {:?}", - account_id_to_string(&who), - assertion - ); - - let parachain_runtime_version = - node_metadata_repo.get_from_metadata(|m| m.system_version())??.spec_version; - let sidechain_runtime_version = SIDECHAIN_VERSION.spec_version; - - Self::request_vc_internal( - signer.to_account_id().ok_or(Self::Error::InvalidAccount)?, - who.clone(), - assertion, - top_hash, - req_ext_hash, - maybe_key, - shard, - parachain_runtime_version, - sidechain_runtime_version, - ) - .map_err(|e| { - debug!("pushing error event ... error: {}", e); - push_call_vcmp_some_error( - calls, - node_metadata_repo, - Some(who), - e.to_vcmp_error(), - req_ext_hash, - ); - e - })?; - Ok(TrustedCallResult::Streamed) + TrustedCall::request_vc(_signer, _who, _assertion, _maybe_key, _req_ext_hash) => { + error!("deprecated, please use author_requestVc instead"); + Ok(TrustedCallResult::Empty) }, TrustedCall::request_batch_vc(..) => { - error!( - "TrustedCall::request_batch_vc is not supported here. Will be removed later." - ); + error!("deprecated, please use author_requestVc instead"); Ok(TrustedCallResult::Empty) }, - TrustedCall::request_vc_callback( - signer, - who, - assertion, - vc_payload, - maybe_key, - should_create_id_graph, - req_ext_hash, - ) => { - debug!( - "request_vc_callback, who: {}, should_create_id_graph: {}, assertion: {:?}", - account_id_to_string(&who), - should_create_id_graph, - assertion - ); - - Self::request_vc_callback_internal( - signer.to_account_id().ok_or(Self::Error::InvalidAccount)?, - who.clone(), - assertion.clone(), - should_create_id_graph, - ) - .map_err(|e| { - debug!("pushing error event ... error: {}", e); - push_call_vcmp_some_error( - calls, - node_metadata_repo.clone(), - Some(who.clone()), - e.to_vcmp_error(), - req_ext_hash, - ); - e - })?; - - debug!("pushing vc_issued event ..."); - let call_index = - node_metadata_repo.get_from_metadata(|m| m.vc_issued_call_indexes())??; - - // IDGraph hash can't be `None` as we should have created it otherwise - let id_graph_hash: H256 = IMT::id_graph_hash(&who).ok_or(StfError::EmptyIDGraph)?; - let mutated_id_graph = - if should_create_id_graph { IMT::id_graph(&who) } else { Vec::new() }; - - calls.push(ParentchainCall::Litentry(OpaqueCall::from_tuple(&( - call_index, - who, - assertion, - id_graph_hash, - req_ext_hash, - )))); - - if let Some(key) = maybe_key { - Ok(TrustedCallResult::RequestVC(RequestVCResult { - vc_payload: aes_encrypt_default(&key, &vc_payload), - vc_logs: None, - pre_mutated_id_graph: aes_encrypt_default(&key, &mutated_id_graph.encode()), - pre_id_graph_hash: id_graph_hash, - })) - } else { - Ok(TrustedCallResult::Empty) - } - }, TrustedCall::set_identity_networks( signer, who, 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 5e287f8eca..dd15f6069c 100644 --- a/tee-worker/app-libs/stf/src/trusted_call_litentry.rs +++ b/tee-worker/app-libs/stf/src/trusted_call_litentry.rs @@ -19,19 +19,13 @@ extern crate sgx_tstd as std; use super::*; use crate::{ - helpers::{ - ensure_enclave_signer_account, ensure_enclave_signer_or_self, get_expected_raw_message, - verify_web3_identity, - }, + helpers::{ensure_enclave_signer_or_self, get_expected_raw_message, verify_web3_identity}, trusted_call_result::{LinkIdentityResult, TrustedCallResult}, Arc, Vec, }; use codec::Encode; -use frame_support::{dispatch::UnfilteredDispatchable, ensure, sp_runtime::traits::One}; -use ita_sgx_runtime::{ - pallet_imt::{get_eligible_identities, IdentityContext}, - BlockNumber, ParentchainLitentry, RuntimeOrigin, System, -}; +use frame_support::{dispatch::UnfilteredDispatchable, ensure}; +use ita_sgx_runtime::{RuntimeOrigin, System}; use itp_node_api::metadata::NodeMetadataTrait; use itp_node_api_metadata::pallet_imp::IMPCallIndexes; use itp_node_api_metadata_provider::AccessNodeMetadata; @@ -42,18 +36,12 @@ use itp_stf_primitives::{ use itp_types::{parentchain::ParentchainCall, OpaqueCall, H256}; use itp_utils::stringify::account_id_to_string; use lc_stf_task_sender::{ - AssertionBuildRequest, RequestType, SendStfRequest, StfRequestSender, - Web2IdentityVerificationRequest, + RequestType, SendStfRequest, StfRequestSender, Web2IdentityVerificationRequest, }; use litentry_macros::if_development_or; -use litentry_primitives::{ - Assertion, ErrorDetail, Identity, RequestAesKey, ValidationData, Web3Network, -}; +use litentry_primitives::{ErrorDetail, Identity, RequestAesKey, ValidationData, Web3Network}; use log::*; -#[cfg(feature = "development")] -use crate::helpers::{ensure_alice, ensure_enclave_signer_or_alice}; - impl TrustedCallSigned { #[allow(clippy::too_many_arguments)] pub fn link_identity_internal( @@ -150,89 +138,6 @@ impl TrustedCallSigned { Ok(()) } - #[allow(clippy::too_many_arguments)] - pub fn request_vc_internal( - signer: AccountId, - who: Identity, - assertion: Assertion, - top_hash: H256, - req_ext_hash: H256, - maybe_key: Option, - shard: &ShardIdentifier, - parachain_runtime_version: u32, - sidechain_runtime_version: u32, - ) -> StfResult<()> { - match assertion { - // the signer will be checked inside A13, as we don't seem to have access to ocall_api here - Assertion::A13(_) => (), - _ => if_development_or!( - ensure!( - ensure_enclave_signer_or_self(&signer, who.to_account_id()) - || ensure_alice(&signer), - StfError::RequestVCFailed(assertion, ErrorDetail::UnauthorizedSigner) - ), - ensure!( - ensure_enclave_signer_or_self(&signer, who.to_account_id()), - StfError::RequestVCFailed(assertion, ErrorDetail::UnauthorizedSigner) - ) - ), - } - - let mut id_graph = IMT::id_graph(&who); - let mut should_create_id_graph = false; - if id_graph.is_empty() { - // create a "virtual" IDGraph now for VC building, the "real" IDGraph will be created - // in `request_vc_callback` when a VC is guaranteed to be issued - // - // we don't mutate the IDGraph here as the transaction is **not** atomic: imagine the VC - // building fails (e.g. due to data provider error), the client won't expect the IDGraph - // to be updated, they can't get the latest IDGraph hash either - // - // we are safe to use `default_web3networks` and `Active` as IDGraph would be non-empty otherwise - id_graph.push(( - who.clone(), - IdentityContext::new(BlockNumber::one(), who.default_web3networks()), - )); - should_create_id_graph = true; - } - let assertion_networks = assertion.get_supported_web3networks(); - let identities = get_eligible_identities( - id_graph.as_ref(), - assertion_networks, - assertion.skip_identity_filtering(), - ); - - ensure!( - !identities.is_empty(), - StfError::RequestVCFailed(assertion, ErrorDetail::NoEligibleIdentity) - ); - - let parachain_block_number = ParentchainLitentry::block_number(); - let sidechain_block_number = System::block_number(); - - let assertion_build: RequestType = AssertionBuildRequest { - shard: *shard, - signer, - who, - assertion: assertion.clone(), - identities, - top_hash, - parachain_block_number, - sidechain_block_number, - parachain_runtime_version, - sidechain_runtime_version, - maybe_key, - should_create_id_graph, - req_ext_hash, - } - .into(); - let sender = StfRequestSender::new(); - sender.send_stf_request(assertion_build).map_err(|e| { - error!("[RequestVc] : {:?}", e); - StfError::RequestVCFailed(assertion, ErrorDetail::SendStfRequestFailed) - }) - } - pub fn link_identity_callback_internal( signer: AccountId, who: Identity, @@ -241,6 +146,7 @@ impl TrustedCallSigned { ) -> StfResult<()> { if_development_or!( { + use crate::helpers::ensure_enclave_signer_or_alice; // In non-prod: we allow to use `Alice` as the dummy signer ensure!( ensure_enclave_signer_or_alice(&signer), @@ -248,6 +154,7 @@ impl TrustedCallSigned { ); }, { + use crate::helpers::ensure_enclave_signer_account; // In prod: the signer has to be enclave_signer_account, as this TrustedCall can only be constructed internally ensure_enclave_signer_account(&signer) .map_err(|_| StfError::LinkIdentityFailed(ErrorDetail::UnauthorizedSigner))?; @@ -260,25 +167,6 @@ impl TrustedCallSigned { Ok(()) } - pub fn request_vc_callback_internal( - signer: AccountId, - who: Identity, - assertion: Assertion, - should_create_id_graph: bool, - ) -> StfResult<()> { - // important! The signer has to be enclave_signer_account, as this TrustedCall can only be constructed internally - ensure_enclave_signer_account(&signer).map_err(|_| { - StfError::RequestVCFailed(assertion.clone(), ErrorDetail::UnauthorizedSigner) - })?; - - if should_create_id_graph { - IMT::maybe_create_id_graph(&who) - .map_err(|e| StfError::RequestVCFailed(assertion, e.into()))?; - } - - Ok(()) - } - // common handler for both web2 and web3 identity verification #[allow(clippy::too_many_arguments)] pub fn handle_link_identity_callback( diff --git a/tee-worker/cli/src/trusted_base_cli/commands/litentry/request_vc.rs b/tee-worker/cli/src/trusted_base_cli/commands/litentry/request_vc.rs index 4aa9998eb5..d684495f05 100644 --- a/tee-worker/cli/src/trusted_base_cli/commands/litentry/request_vc.rs +++ b/tee-worker/cli/src/trusted_base_cli/commands/litentry/request_vc.rs @@ -19,9 +19,7 @@ use crate::{ trusted_base_cli::commands::litentry::request_vc_subcommands::Command, trusted_cli::TrustedCli, trusted_command_utils::{get_identifiers, get_pair_from_str}, - trusted_operation::{ - perform_trusted_operation, prepare_request_data_and_send_direct_vc_request, - }, + trusted_operation::prepare_request_data_and_send_direct_vc_request, Cli, CliResult, CliResultOk, }; use clap::Parser; @@ -32,7 +30,7 @@ use litentry_primitives::{ aes_decrypt, Assertion, BoundedWeb3Network, Identity, ParameterString, RequestAesKey, Web3Network, REQUEST_AES_KEY_LEN, }; -use sp_core::{Pair, H256}; +use sp_core::Pair; // usage example below // @@ -88,9 +86,6 @@ where pub struct RequestVcCommand { // did account to whom the vc will be issued did: String, - // mode for the request-vc - #[clap(short, long, default_value_t = false)] - stf: bool, // the assertion itself, can be specified more than once // the value will be passed into the parser as a whole string #[clap(short, long, num_args = 1..)] @@ -119,7 +114,7 @@ impl RequestVcCommand { println!(">>> identity: {:?}", identity); let (mrenclave, shard) = get_identifiers(trusted_cli, cli); - let mut nonce = get_layer_two_nonce!(alice, cli, trusted_cli); + let nonce = get_layer_two_nonce!(alice, cli, trusted_cli); println!(">>> nonce: {}", nonce); let assertions: Vec = self @@ -136,69 +131,33 @@ impl RequestVcCommand { let key = Self::random_aes_key(); - if self.stf { - assertions.into_iter().for_each(|a| { - let top = TrustedCall::request_vc( - alice.public().into(), - identity.clone(), - a, - Some(key), - Default::default(), - ) - .sign(&KeyPair::Sr25519(Box::new(alice.clone())), nonce, &mrenclave, &shard) - .into_trusted_operation(trusted_cli.direct); - - if trusted_cli.direct { - match perform_trusted_operation::(cli, trusted_cli, &top) { - Ok(vc) => { - print_vc(&key, vc); - }, - Err(e) => { - println!("{:?}", e); - }, - } - } else { - println!("WARNING: This method does not support printing VC, Please use -d for direct invocation to print the VC"); - match perform_trusted_operation::(cli, trusted_cli, &top) { - Ok(block_hash) => { - println!("Request VC Event included in block hash: {:?}", block_hash) - }, - Err(e) => { - println!("{:?}", e); - }, - } - } - nonce += 1; - }); - } else { - let top = TrustedCall::request_batch_vc( - alice.public().into(), - identity, - assertions.try_into().unwrap(), - Some(key), - Default::default(), - ) - .sign(&KeyPair::Sr25519(Box::new(alice)), 0, &mrenclave, &shard) - .into_trusted_operation(trusted_cli.direct); - - match prepare_request_data_and_send_direct_vc_request(cli, trusted_cli, &top, key) { - Ok(result) => - for res in result { - match res.result { - Err(err) => { - println!("received one error: {:?}", err); - }, - Ok(payload) => { - let vc = RequestVCResult::decode(&mut payload.as_slice()).unwrap(); - print_vc(&key, vc); - }, - } - }, - Err(e) => { - println!("{:?}", e); + let top = TrustedCall::request_batch_vc( + alice.public().into(), + identity, + assertions.try_into().unwrap(), + Some(key), + Default::default(), + ) + .sign(&KeyPair::Sr25519(Box::new(alice)), 0, &mrenclave, &shard) + .into_trusted_operation(trusted_cli.direct); + + match prepare_request_data_and_send_direct_vc_request(cli, trusted_cli, &top, key) { + Ok(result) => + for res in result { + match res.result { + Err(err) => { + println!("received one error: {:?}", err); + }, + Ok(payload) => { + let vc = RequestVCResult::decode(&mut payload.as_slice()).unwrap(); + print_vc(&key, vc); + }, + } }, - } - }; + Err(e) => { + println!("{:?}", e); + }, + } Ok(CliResultOk::None) } diff --git a/tee-worker/core-primitives/extrinsics-factory/src/mock.rs b/tee-worker/core-primitives/extrinsics-factory/src/mock.rs index 3a801863ce..bdcede5a7e 100644 --- a/tee-worker/core-primitives/extrinsics-factory/src/mock.rs +++ b/tee-worker/core-primitives/extrinsics-factory/src/mock.rs @@ -46,8 +46,8 @@ impl CreateExtrinsics for ExtrinsicsFactoryMock { fn create_batch_extrinsic( &self, - calls: Vec, - extrinsics_params: Option, + _calls: Vec, + _extrinsics_params: Option, ) -> Result { Ok(OpaqueExtrinsic::from_bytes(Vec::new().as_slice()).unwrap()) } diff --git a/tee-worker/core-primitives/stf-state-handler/src/file_io.rs b/tee-worker/core-primitives/stf-state-handler/src/file_io.rs index 05a5ed2780..f401c11615 100644 --- a/tee-worker/core-primitives/stf-state-handler/src/file_io.rs +++ b/tee-worker/core-primitives/stf-state-handler/src/file_io.rs @@ -431,7 +431,7 @@ mod tests { ) .is_none()); assert!( - extract_state_id_from_file_name(format!("{}", ENCRYPTED_STATE_FILE).as_str()).is_none() + extract_state_id_from_file_name(ENCRYPTED_STATE_FILE.to_string().as_str()).is_none() ); assert!(extract_state_id_from_file_name( format!("1234_{}-other", ENCRYPTED_STATE_FILE).as_str() diff --git a/tee-worker/core-primitives/stf-state-handler/src/in_memory_state_file_io.rs b/tee-worker/core-primitives/stf-state-handler/src/in_memory_state_file_io.rs index 6b7efb79be..cfb81bffbe 100644 --- a/tee-worker/core-primitives/stf-state-handler/src/in_memory_state_file_io.rs +++ b/tee-worker/core-primitives/stf-state-handler/src/in_memory_state_file_io.rs @@ -401,8 +401,7 @@ mod tests { state: &TestState, state_hash: &StateHash, ) { - let (retrieved_hash, retrieved_state) = - get_state_entry(&state_file_io, &shard_id, state_id); + let (retrieved_hash, retrieved_state) = get_state_entry(state_file_io, shard_id, state_id); assert!(state_file_io.shard_exists(shard_id)); assert_eq!(state_hash, &retrieved_hash); assert_eq!(state, &retrieved_state); @@ -413,12 +412,7 @@ mod tests { shard_id: &ShardIdentifier, state_id: StateId, ) -> (StateHash, TestState) { - state_file_io - .get_states_for_shard(shard_id) - .unwrap() - .get(&state_id) - .unwrap() - .clone() + *state_file_io.get_states_for_shard(shard_id).unwrap().get(&state_id).unwrap() } fn create_in_memory_state_file_io(shards: &[ShardIdentifier]) -> TestStateFileIo { diff --git a/tee-worker/core-primitives/stf-state-handler/src/state_snapshot_repository.rs b/tee-worker/core-primitives/stf-state-handler/src/state_snapshot_repository.rs index 7a9fcd4797..b6b1a1fe65 100644 --- a/tee-worker/core-primitives/stf-state-handler/src/state_snapshot_repository.rs +++ b/tee-worker/core-primitives/stf-state-handler/src/state_snapshot_repository.rs @@ -350,7 +350,7 @@ mod tests { vec![ShardIdentifier::random(), ShardIdentifier::random(), ShardIdentifier::random()]; let file_io = create_test_file_io(shards.as_slice()); - assert!(TestSnapshotRepository::empty(file_io.clone(), 0usize).is_err()); + assert!(TestSnapshotRepository::empty(file_io, 0usize).is_err()); } #[test] @@ -388,7 +388,7 @@ mod tests { let new_state = TestState(1234u64); - let _ = state_snapshot_repository + state_snapshot_repository .update(shard_to_update, &new_state, Default::default()) .unwrap(); @@ -406,11 +406,11 @@ mod tests { create_state_snapshot_repository(&[shard_id], TEST_SNAPSHOT_REPOSITORY_CACHE_SIZE); let states: Vec = - [1u64, 2u64, 3u64, 4u64, 5u64, 6u64].into_iter().map(|i| TestState(i)).collect(); + [1u64, 2u64, 3u64, 4u64, 5u64, 6u64].into_iter().map(TestState).collect(); assert!(states.len() > TEST_SNAPSHOT_REPOSITORY_CACHE_SIZE); // ensures we have pruning states.iter().for_each(|state| { - let _ = state_snapshot_repository.update(&shard_id, state, Default::default()).unwrap(); + state_snapshot_repository.update(&shard_id, state, Default::default()).unwrap(); }); let snapshot_history = state_snapshot_repository.snapshot_history.get(&shard_id).unwrap(); @@ -449,7 +449,7 @@ mod tests { create_state_snapshot_repository(&[shard_id], 6); let states: Vec = - [1u64, 2u64, 3u64, 4u64, 5u64].into_iter().map(|i| TestState(i)).collect(); + [1u64, 2u64, 3u64, 4u64, 5u64].into_iter().map(TestState).collect(); let state_hashes = states .iter() diff --git a/tee-worker/core-primitives/stf-state-handler/src/test/mocks/versioned_state_access_mock.rs b/tee-worker/core-primitives/stf-state-handler/src/test/mocks/versioned_state_access_mock.rs index defe1c4d1c..b4371aee11 100644 --- a/tee-worker/core-primitives/stf-state-handler/src/test/mocks/versioned_state_access_mock.rs +++ b/tee-worker/core-primitives/stf-state-handler/src/test/mocks/versioned_state_access_mock.rs @@ -64,10 +64,8 @@ where state: &Self::StateType, _state_hash: Self::HashType, ) -> Result<()> { - let state_history = self - .state_history - .entry(*shard_identifier) - .or_insert_with(|| VecDeque::default()); + let state_history = + self.state_history.entry(*shard_identifier).or_insert_with(VecDeque::default); state_history.push_front(state.clone()); Ok(()) } diff --git a/tee-worker/core-primitives/stf-state-observer/src/state_observer.rs b/tee-worker/core-primitives/stf-state-observer/src/state_observer.rs index 4e75fad729..156d538325 100644 --- a/tee-worker/core-primitives/stf-state-observer/src/state_observer.rs +++ b/tee-worker/core-primitives/stf-state-observer/src/state_observer.rs @@ -111,7 +111,7 @@ mod tests { let state_observer = StateObserver::::default(); assert_matches!( - state_observer.observe_state(&shard(), |_| { () }), + state_observer.observe_state(&shard(), |_| {}), Err(Error::CurrentShardStateEmpty) ); } diff --git a/tee-worker/core-primitives/top-pool-author/src/api.rs b/tee-worker/core-primitives/top-pool-author/src/api.rs index 45e1d35afb..b7b2968959 100644 --- a/tee-worker/core-primitives/top-pool-author/src/api.rs +++ b/tee-worker/core-primitives/top-pool-author/src/api.rs @@ -133,7 +133,7 @@ mod tests { type TestChainApi = SidechainApi; pub fn endowed_account() -> ed25519::Pair { - ed25519::Pair::from_seed(&[42u8; 32].into()) + ed25519::Pair::from_seed(&[42u8; 32]) } #[test] diff --git a/tee-worker/core-primitives/top-pool-author/src/mocks.rs b/tee-worker/core-primitives/top-pool-author/src/mocks.rs index 3f6754bbbe..f139dcb319 100644 --- a/tee-worker/core-primitives/top-pool-author/src/mocks.rs +++ b/tee-worker/core-primitives/top-pool-author/src/mocks.rs @@ -307,7 +307,7 @@ mod tests { let trusted_operation_or_hash = TrustedOperationOrHash::::from_top( - trusted_operation.clone(), + trusted_operation, ); let removed_tops = author.remove_top(vec![trusted_operation_or_hash], shard, true).unwrap(); diff --git a/tee-worker/core/direct-rpc-server/src/rpc_responder.rs b/tee-worker/core/direct-rpc-server/src/rpc_responder.rs index 904d9c1e9b..62c28f848b 100644 --- a/tee-worker/core/direct-rpc-server/src/rpc_responder.rs +++ b/tee-worker/core/direct-rpc-server/src/rpc_responder.rs @@ -350,14 +350,14 @@ pub mod tests { #[test] fn updating_status_event_with_finalized_state_removes_connection() { let connection_hash = H256::random(); - let connection_registry = create_registry_with_single_connection(connection_hash.clone()); + let connection_registry = create_registry_with_single_connection(connection_hash); let websocket_responder = Arc::new(TestResponseChannel::default()); let rpc_responder = RpcResponder::new(connection_registry.clone(), websocket_responder.clone()); - let result = rpc_responder - .update_status_event(connection_hash.clone(), TrustedOperationStatus::Finalized); + let result = + rpc_responder.update_status_event(connection_hash, TrustedOperationStatus::Finalized); assert!(result.is_ok()); @@ -368,17 +368,15 @@ pub mod tests { #[test] fn updating_status_event_with_finalized_state_doesnt_remove_connection_if_force_watch_set() { let connection_hash = H256::random(); - let connection_registry = create_registry_with_single_connection(connection_hash.clone()); + let connection_registry = create_registry_with_single_connection(connection_hash); let websocket_responder = Arc::new(TestResponseChannel::default()); let rpc_responder = RpcResponder::new(connection_registry.clone(), websocket_responder.clone()); - rpc_responder - .update_connection_state(connection_hash.clone(), vec![], true) - .unwrap(); + rpc_responder.update_connection_state(connection_hash, vec![], true).unwrap(); - let result = rpc_responder - .update_status_event(connection_hash.clone(), TrustedOperationStatus::Finalized); + let result = + rpc_responder.update_status_event(connection_hash, TrustedOperationStatus::Finalized); assert!(result.is_ok()); @@ -390,17 +388,17 @@ pub mod tests { fn updating_status_event_with_ready_state_keeps_connection_and_sends_update() { let connection_hash = H256::random(); let connection_registry: Arc> = - create_registry_with_single_connection(connection_hash.clone()); + create_registry_with_single_connection(connection_hash); let websocket_responder = Arc::new(TestResponseChannel::default()); let rpc_responder = RpcResponder::new(connection_registry.clone(), websocket_responder.clone()); - let first_result = rpc_responder - .update_status_event(connection_hash.clone(), TrustedOperationStatus::Ready); + let first_result = + rpc_responder.update_status_event(connection_hash, TrustedOperationStatus::Ready); - let second_result = rpc_responder - .update_status_event(connection_hash.clone(), TrustedOperationStatus::Submitted); + let second_result = + rpc_responder.update_status_event(connection_hash, TrustedOperationStatus::Submitted); assert!(first_result.is_ok()); assert!(second_result.is_ok()); @@ -412,13 +410,13 @@ pub mod tests { #[test] fn sending_state_successfully_sends_update_and_removes_connection_token() { let connection_hash = H256::random(); - let connection_registry = create_registry_with_single_connection(connection_hash.clone()); + let connection_registry = create_registry_with_single_connection(connection_hash); let websocket_responder = Arc::new(TestResponseChannel::default()); let rpc_responder = RpcResponder::new(connection_registry.clone(), websocket_responder.clone()); - let result = rpc_responder.send_state(connection_hash.clone(), "new_state".encode()); + let result = rpc_responder.send_state(connection_hash, "new_state".encode()); assert!(result.is_ok()); verify_closed_connection(&connection_hash, connection_registry); @@ -438,7 +436,7 @@ pub mod tests { connection_hash: &H256, connection_registry: Arc, ) { - let maybe_connection = connection_registry.withdraw(&connection_hash); + let maybe_connection = connection_registry.withdraw(connection_hash); assert!(maybe_connection.is_some()); } @@ -446,7 +444,7 @@ pub mod tests { connection_hash: &H256, connection_registry: Arc, ) { - assert!(connection_registry.withdraw(&connection_hash).is_none()); + assert!(connection_registry.withdraw(connection_hash).is_none()); } fn create_registry_with_single_connection( @@ -455,7 +453,7 @@ pub mod tests { let connection_registry = TestConnectionRegistry::new(); let rpc_response = RpcResponseBuilder::new().with_id(2).build(); - connection_registry.store(connection_hash.clone(), 1, rpc_response, false); + connection_registry.store(connection_hash, 1, rpc_response, false); Arc::new(connection_registry) } } diff --git a/tee-worker/core/parentchain/block-import-dispatcher/src/triggered_dispatcher.rs b/tee-worker/core/parentchain/block-import-dispatcher/src/triggered_dispatcher.rs index 712fcc724d..e764cdf0f2 100644 --- a/tee-worker/core/parentchain/block-import-dispatcher/src/triggered_dispatcher.rs +++ b/tee-worker/core/parentchain/block-import-dispatcher/src/triggered_dispatcher.rs @@ -367,8 +367,7 @@ mod tests { let events_import_queue = ImportQueue::::default(); let import_queue = ImportQueue::::default(); let block_importer = ParentchainBlockImporterMock::::default(); - let dispatcher = - TriggeredDispatcher::new(block_importer, import_queue, events_import_queue); - dispatcher + + TriggeredDispatcher::new(block_importer, import_queue, events_import_queue) } } diff --git a/tee-worker/core/parentchain/light-client/src/concurrent_access.rs b/tee-worker/core/parentchain/light-client/src/concurrent_access.rs index fda60d74b0..ad99a96ade 100644 --- a/tee-worker/core/parentchain/light-client/src/concurrent_access.rs +++ b/tee-worker/core/parentchain/light-client/src/concurrent_access.rs @@ -137,7 +137,7 @@ mod tests { let seal = LightValidationStateSealMock::new(); let accessor = TestAccessor::new(validator_mock, seal.into()); - let _read_result = accessor.execute_on_validator(|_v| Ok(())).unwrap(); - let _write_result = accessor.execute_mut_on_validator(|_v| Ok(())).unwrap(); + accessor.execute_on_validator(|_v| Ok(())).unwrap(); + accessor.execute_mut_on_validator(|_v| Ok(())).unwrap(); } } diff --git a/tee-worker/core/peer-top-broadcaster/src/lib.rs b/tee-worker/core/peer-top-broadcaster/src/lib.rs index ab9321deb4..1d8f5310e7 100644 --- a/tee-worker/core/peer-top-broadcaster/src/lib.rs +++ b/tee-worker/core/peer-top-broadcaster/src/lib.rs @@ -282,7 +282,7 @@ pub mod tests { impl RpcClient for MockedRpcClient { fn send(&mut self, _request: &RpcRequest) -> Result<(), Box> { - self.sent_requests = self.sent_requests + 1; + self.sent_requests += 1; Ok(()) } } @@ -317,7 +317,7 @@ pub mod tests { //when let broadcaster: DirectRpcBroadcaster = - DirectRpcBroadcaster::new(&vec!["localhost"], factory, rpc_responder); + DirectRpcBroadcaster::new(&["localhost"], factory, rpc_responder); //then assert_eq!(broadcaster.peers.lock().unwrap().len(), 1); @@ -332,7 +332,7 @@ pub mod tests { let rpc_responder = Arc::new(RpcResponder::new(connection_registry, websocket_responder)); let broadcaster: DirectRpcBroadcaster = - DirectRpcBroadcaster::new(&vec!["localhost", "localhost2"], factory, rpc_responder); + DirectRpcBroadcaster::new(&["localhost", "localhost2"], factory, rpc_responder); //when broadcaster.broadcast(BroadcastedRequest { @@ -366,7 +366,7 @@ pub mod tests { let rpc_responder = Arc::new(RpcResponder::new(connection_registry, websocket_responder)); let broadcaster: DirectRpcBroadcaster = - DirectRpcBroadcaster::new(&vec![retained_peer, removed_peer], factory, rpc_responder); + DirectRpcBroadcaster::new(&[retained_peer, removed_peer], factory, rpc_responder); //when broadcaster.update(vec![retained_peer.to_string(), added_peer.to_string()]); diff --git a/tee-worker/core/rest-client/src/http_client.rs b/tee-worker/core/rest-client/src/http_client.rs index 1207c6ea02..63dbd79968 100644 --- a/tee-worker/core/rest-client/src/http_client.rs +++ b/tee-worker/core/rest-client/src/http_client.rs @@ -443,7 +443,7 @@ mod tests { impl RestPath<()> for HttpBinAnything { fn get_path(_: ()) -> Result { - Ok(format!("anything")) + Ok("anything".to_string()) } } @@ -487,7 +487,7 @@ mod tests { impl RestPath<()> for HttpBinAnything { fn get_path(_: ()) -> Result { - Ok(format!("anything")) + Ok("anything".to_string()) } } @@ -523,7 +523,7 @@ mod tests { impl RestPath<()> for HttpBinAnything { fn get_path(_: ()) -> Result { - Ok(format!("anything")) + Ok("anything".to_string()) } } @@ -569,7 +569,7 @@ mod tests { impl RestPath<()> for Vec { fn get_path(_: ()) -> Result { - Ok(format!("api/v3/coins/list")) + Ok("api/v3/coins/list".to_string()) } } @@ -599,7 +599,7 @@ mod tests { impl RestPath<()> for HttpBinAnything { fn get_path(_: ()) -> Result { - Ok(format!("anything")) + Ok("anything".to_string()) } } let base_url = Url::parse("https://httpbin.org").unwrap(); @@ -636,7 +636,7 @@ mod tests { impl RestPath<()> for HttpBinAnything { fn get_path(_: ()) -> Result { - Ok(format!("anything")) + Ok("anything".to_string()) } } diff --git a/tee-worker/core/rest-client/src/mocks/http_client_mock.rs b/tee-worker/core/rest-client/src/mocks/http_client_mock.rs index b7a2b4cc82..a7cc7bf362 100644 --- a/tee-worker/core/rest-client/src/mocks/http_client_mock.rs +++ b/tee-worker/core/rest-client/src/mocks/http_client_mock.rs @@ -41,7 +41,7 @@ pub struct ResponseBodyMock { impl RestPath for ResponseBodyMock { fn get_path(path: String) -> Result { - Ok(format!("{}", path)) + Ok(path) } } @@ -77,7 +77,7 @@ impl SendHttpRequest for HttpClientMock { let query_parameters = query .map(|q| q.iter().map(|(key, value)| (key.to_string(), value.to_string())).collect()) - .unwrap_or_else(|| Vec::<(String, String)>::new()); + .unwrap_or_else(Vec::<(String, String)>::new); let response_body = ResponseBodyMock { base_url: base_url_str, diff --git a/tee-worker/core/tls-websocket-server/src/ws_server.rs b/tee-worker/core/tls-websocket-server/src/ws_server.rs index 84a2805749..ba9d3a6030 100644 --- a/tee-worker/core/tls-websocket-server/src/ws_server.rs +++ b/tee-worker/core/tls-websocket-server/src/ws_server.rs @@ -400,7 +400,7 @@ mod tests { let expected_answer = "websocket server response".to_string(); let port: u16 = 21778; - let (server, handler) = create_server(vec![expected_answer.clone()], port); + let (server, handler) = create_server(vec![expected_answer], port); let server_clone = server.clone(); let server_join_handle = thread::spawn(move || server_clone.run()); diff --git a/tee-worker/docker/lit-di-vc-multiworker-test.yml b/tee-worker/docker/lit-di-vc-multiworker-test.yml deleted file mode 100644 index 295b8ab5a2..0000000000 --- a/tee-worker/docker/lit-di-vc-multiworker-test.yml +++ /dev/null @@ -1,22 +0,0 @@ -services: - lit-di-vc-multiworker-test: - image: litentry/identity-cli:latest - container_name: litentry-di-vc-test - volumes: - - ../ts-tests:/ts-tests - - ../client-api:/client-api - - ../cli:/usr/local/worker-cli - build: - context: .. - dockerfile: build.Dockerfile - target: deployed-client - depends_on: - litentry-worker-3: - condition: service_healthy - networks: - - litentry-test-network - entrypoint: "bash -c '/usr/local/worker-cli/lit_ts_integration_test.sh di_vc.test.ts 2>&1' " - restart: "no" -networks: - litentry-test-network: - driver: bridge diff --git a/tee-worker/docker/lit-di-vc-test.yml b/tee-worker/docker/lit-di-vc-test.yml deleted file mode 100644 index e0fbfff830..0000000000 --- a/tee-worker/docker/lit-di-vc-test.yml +++ /dev/null @@ -1,22 +0,0 @@ -services: - lit-di-vc-test: - image: litentry/identity-cli:latest - container_name: litentry-di-vc-test - volumes: - - ../ts-tests:/ts-tests - - ../client-api:/client-api - - ../cli:/usr/local/worker-cli - build: - context: .. - dockerfile: build.Dockerfile - target: deployed-client - depends_on: - litentry-worker-1: - condition: service_healthy - networks: - - litentry-test-network - entrypoint: "bash -c '/usr/local/worker-cli/lit_ts_integration_test.sh di_vc.test.ts 2>&1' " - restart: "no" -networks: - litentry-test-network: - driver: bridge diff --git a/tee-worker/litentry/core/assertion-build-v2/src/nft_holder/mod.rs b/tee-worker/litentry/core/assertion-build-v2/src/nft_holder/mod.rs index 7056f076dd..adfaef31d0 100644 --- a/tee-worker/litentry/core/assertion-build-v2/src/nft_holder/mod.rs +++ b/tee-worker/litentry/core/assertion-build-v2/src/nft_holder/mod.rs @@ -230,14 +230,14 @@ mod tests { .set_nodereal_api_chain_network_url(url.clone() + "/nodereal_jsonrpc/") .unwrap(); data_provider_config.set_moralis_api_key("d416f55179dbd0e45b1a8ed030e3".into()); - data_provider_config.set_moralis_api_url(url.clone() + "/moralis/").unwrap(); + data_provider_config.set_moralis_api_url(url + "/moralis/").unwrap(); data_provider_config } #[test] fn build_werido_ghost_gang_holder_works() { let data_provider_config = init(); - let address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes().to_vec()) + let address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes()) .unwrap() .as_slice() .try_into() @@ -270,12 +270,11 @@ mod tests { #[test] fn build_club3_sbt_holder_works() { let data_provider_config = init(); - let mut address = - decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes().to_vec()) - .unwrap() - .as_slice() - .try_into() - .unwrap(); + let mut address = decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes()) + .unwrap() + .as_slice() + .try_into() + .unwrap(); let mut identities: Vec = vec![(Identity::Evm(address), vec![Web3Network::Bsc, Web3Network::Polygon])]; @@ -299,7 +298,7 @@ mod tests { }, } - address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes().to_vec()) + address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes()) .unwrap() .as_slice() .try_into() @@ -333,12 +332,11 @@ mod tests { #[test] fn build_mfan_holder_works() { let data_provider_config = init(); - let mut address = - decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes().to_vec()) - .unwrap() - .as_slice() - .try_into() - .unwrap(); + let mut address = decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes()) + .unwrap() + .as_slice() + .try_into() + .unwrap(); let mut identities: Vec = vec![(Identity::Evm(address), vec![Web3Network::Polygon])]; @@ -362,7 +360,7 @@ mod tests { }, } - address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes().to_vec()) + address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes()) .unwrap() .as_slice() .try_into() diff --git a/tee-worker/litentry/core/assertion-build-v2/src/platform_user/mod.rs b/tee-worker/litentry/core/assertion-build-v2/src/platform_user/mod.rs index fe459d74be..a4c5725c8b 100644 --- a/tee-worker/litentry/core/assertion-build-v2/src/platform_user/mod.rs +++ b/tee-worker/litentry/core/assertion-build-v2/src/platform_user/mod.rs @@ -145,7 +145,7 @@ mod tests { ) { let req = crate_assertion_build_request(platform_user_type.clone(), identities); - match build(&req, platform_user_type.clone(), &data_provider_config) { + match build(&req, platform_user_type.clone(), data_provider_config) { Ok(credential) => { log::info!("build platform user: {:?} done", platform_user_type); assert_eq!( @@ -173,12 +173,11 @@ mod tests { fn build_karat_dao_user_works() { let data_provider_config = init(PlatformUserType::KaratDao); - let mut address = - decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes().to_vec()) - .unwrap() - .as_slice() - .try_into() - .unwrap(); + let mut address = decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes()) + .unwrap() + .as_slice() + .try_into() + .unwrap(); let mut identities: Vec = vec![(Identity::Evm(address), vec![Web3Network::Ethereum])]; @@ -189,7 +188,7 @@ mod tests { &data_provider_config, ); - address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes().to_vec()) + address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -208,12 +207,11 @@ mod tests { fn build_magic_craft_staking_user_works() { let data_provider_config = init(PlatformUserType::MagicCraftStaking); - let mut address = - decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes().to_vec()) - .unwrap() - .as_slice() - .try_into() - .unwrap(); + let mut address = decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes()) + .unwrap() + .as_slice() + .try_into() + .unwrap(); let mut identities: Vec = vec![(Identity::Evm(address), vec![Web3Network::Ethereum])]; @@ -224,7 +222,7 @@ mod tests { &data_provider_config, ); - address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes().to_vec()) + address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -243,12 +241,11 @@ mod tests { fn build_daren_market_user_works() { let data_provider_config = init(PlatformUserType::DarenMarket); - let mut address = - decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes().to_vec()) - .unwrap() - .as_slice() - .try_into() - .unwrap(); + let mut address = decode_hex("0x49ad262c49c7aa708cc2df262ed53b64a17dd5ee".as_bytes()) + .unwrap() + .as_slice() + .try_into() + .unwrap(); let mut identities: Vec = vec![(Identity::Evm(address), vec![Web3Network::Ethereum])]; @@ -259,7 +256,7 @@ mod tests { &data_provider_config, ); - address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes().to_vec()) + address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes()) .unwrap() .as_slice() .try_into() diff --git a/tee-worker/litentry/core/assertion-build-v2/src/token_holding_amount/mod.rs b/tee-worker/litentry/core/assertion-build-v2/src/token_holding_amount/mod.rs index f2e6112bec..cdca9d0e88 100644 --- a/tee-worker/litentry/core/assertion-build-v2/src/token_holding_amount/mod.rs +++ b/tee-worker/litentry/core/assertion-build-v2/src/token_holding_amount/mod.rs @@ -120,13 +120,13 @@ mod tests { ) -> AssertionLogic { let mut assertion = AssertionLogic::new_and(); assertion = assertion.add_item(AssertionLogic::new_item( - "$network".into(), + "$network", Op::Equal, web3_network_to_chain(&network), )); if let Some(address) = token_type.get_token_address(network) { assertion = - assertion.add_item(AssertionLogic::new_item("$address".into(), Op::Equal, address)); + assertion.add_item(AssertionLogic::new_item("$address", Op::Equal, address)); } assertion } @@ -158,7 +158,7 @@ mod tests { data_provider_config.set_achainable_url(url.clone()).unwrap(); data_provider_config.set_moralis_api_url(url.clone() + "/moralis/").unwrap(); data_provider_config - .set_moralis_solana_api_url(url.clone() + "/moralis_solana/") + .set_moralis_solana_api_url(url + "/moralis_solana/") .unwrap(); data_provider_config } @@ -166,7 +166,7 @@ mod tests { #[test] fn build_bnb_holding_amount_works() { let data_provider_config = init(); - let address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes().to_vec()) + let address = decode_hex("0x45cdb67696802b9d01ed156b883269dbdb9c6239".as_bytes()) .unwrap() .as_slice() .try_into() @@ -247,7 +247,7 @@ mod tests { #[test] fn build_evm_holding_amount_works() { let data_provider_config = init(); - let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes().to_vec()) + let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -290,7 +290,7 @@ mod tests { #[test] fn build_ethereum_holding_amount_works() { let data_provider_config = init(); - let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes().to_vec()) + let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e7c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -333,7 +333,7 @@ mod tests { #[test] fn build_lit_holding_amount_works() { let data_provider_config = init(); - let address = decode_hex("0xba359c153ad11aa17c3122b05a4db8b46bb3191b".as_bytes().to_vec()) + let address = decode_hex("0xba359c153ad11aa17c3122b05a4db8b46bb3191b".as_bytes()) .unwrap() .as_slice() .try_into() @@ -382,7 +382,7 @@ mod tests { .as_slice() .try_into() .unwrap(); - let address2 = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e0c".as_bytes().to_vec()) + let address2 = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e0c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -427,12 +427,11 @@ mod tests { #[test] fn build_nfp_holding_amount_works() { let data_provider_config = init(); - let mut address = - decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e0c".as_bytes().to_vec()) - .unwrap() - .as_slice() - .try_into() - .unwrap(); + let mut address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e0c".as_bytes()) + .unwrap() + .as_slice() + .try_into() + .unwrap(); let mut identities: Vec = vec![(Identity::Evm(address), vec![Web3Network::Bsc])]; let mut req = crate_assertion_build_request(Web3TokenType::Nfp, identities); @@ -460,7 +459,7 @@ mod tests { }, }; - address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e1c".as_bytes().to_vec()) + address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e1c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -496,7 +495,7 @@ mod tests { }, }; - address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e2c".as_bytes().to_vec()) + address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e2c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -532,7 +531,7 @@ mod tests { }, }; - address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e3c".as_bytes().to_vec()) + address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e3c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -613,9 +612,7 @@ mod tests { let data_provider_config: DataProviderConfig = init(); // bc1pgr5fw4p9gl9me0vzjklnlnap669caxc0gsk4j62gff2qktlw6naqm4m3d0 let address = decode_hex( - "0x02e8c39e82aaaa143c3def8d3c7084a539b227244ac9067c3f7fc86cb73a0b7aed" - .as_bytes() - .to_vec(), + "0x02e8c39e82aaaa143c3def8d3c7084a539b227244ac9067c3f7fc86cb73a0b7aed".as_bytes(), ) .unwrap() .as_slice() @@ -654,7 +651,7 @@ mod tests { #[test] fn build_bean_holding_amount_works() { let data_provider_config: DataProviderConfig = init(); - let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e3c".as_bytes().to_vec()) + let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e3c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -694,7 +691,7 @@ mod tests { #[test] fn build_an_holding_amount_works() { let data_provider_config: DataProviderConfig = init(); - let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e4c".as_bytes().to_vec()) + let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e4c".as_bytes()) .unwrap() .as_slice() .try_into() @@ -734,7 +731,7 @@ mod tests { #[test] fn build_tuna_holding_amount_works() { let data_provider_config: DataProviderConfig = init(); - let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e5c".as_bytes().to_vec()) + let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e5c".as_bytes()) .unwrap() .as_slice() .try_into() diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/mod.rs b/tee-worker/litentry/core/assertion-build/src/dynamic/mod.rs index 374f810ad0..4330bda8b3 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/mod.rs +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/mod.rs @@ -281,9 +281,7 @@ pub mod assertion_test { // given // bc1pgr5fw4p9gl9me0vzjklnlnap669caxc0gsk4j62gff2qktlw6naqm4m3d0 let address = decode_hex( - "0x02e8c39e82aaaa143c3def8d3c7084a539b227244ac9067c3f7fc86cb73a0b7aed" - .as_bytes() - .to_vec(), + "0x02e8c39e82aaaa143c3def8d3c7084a539b227244ac9067c3f7fc86cb73a0b7aed".as_bytes(), ) .unwrap() .as_slice() diff --git a/tee-worker/litentry/core/assertion-build/src/lib.rs b/tee-worker/litentry/core/assertion-build/src/lib.rs index ed92ef992a..dfd715a233 100644 --- a/tee-worker/litentry/core/assertion-build/src/lib.rs +++ b/tee-worker/litentry/core/assertion-build/src/lib.rs @@ -279,35 +279,35 @@ mod tests { let addr = "bc1qlht0muueu6wln5qqwtvczjepnfeerpaw480067"; let pubkey = "0272cbf3e56e238897ca9ee9ca9594a82803cfdf19121bd939cbe3f2e1bcaffc7b"; let network = Web3Network::BitcoinP2wpkh; - let gen_addr = pubkey_to_address(&network, &pubkey); + let gen_addr = pubkey_to_address(&network, pubkey); assert_eq!(addr, gen_addr); // p2sh let addr = "35KQSeZpaABvNWmKAMXo7mAAtXZBqCd4sw"; let pubkey = "02e46883d2101f09e875dd4a67ee5c2dce9d821b9a610a7e12ab0de7494b19b7d0"; let network = Web3Network::BitcoinP2sh; - let gen_addr = pubkey_to_address(&network, &pubkey); + let gen_addr = pubkey_to_address(&network, pubkey); assert_eq!(addr, gen_addr); // p2tr let addr = "bc1pwgqves622fs5s42h4sr8hu9y6ej232hga8uxal7xgkcsy8a3ryqqvgku7t"; let pubkey = "031d867537093a8eaace96717ba0aa226a5bf368c6c84ca5dfb214d380bc91afbe"; let network = Web3Network::BitcoinP2tr; - let gen_addr = pubkey_to_address(&network, &pubkey); + let gen_addr = pubkey_to_address(&network, pubkey); assert_eq!(addr, gen_addr); // p2pkh let addr = "1CY8nArJbvLSHQmKp3SiG8T5WSBfnMJpJx"; let pubkey = "02784a686e5ffc74d713f66cb8885d6b75c062c61df5f6de8f86f07c340ebc183c"; let network = Web3Network::BitcoinP2pkh; - let gen_addr = pubkey_to_address(&network, &pubkey); + let gen_addr = pubkey_to_address(&network, pubkey); assert_eq!(addr, gen_addr); // p2wsh let addr = ""; let pubkey = "02e46883d2101f09e875dd4a67ee5c2dce9d821b9a610a7e12ab0de7494b19b7d0"; let network = Web3Network::BitcoinP2wsh; - let gen_addr = pubkey_to_address(&network, &pubkey); + let gen_addr = pubkey_to_address(&network, pubkey); assert_eq!(addr, gen_addr); } } diff --git a/tee-worker/litentry/core/assertion-build/src/nodereal/amount_holding/evm_amount_holding.rs b/tee-worker/litentry/core/assertion-build/src/nodereal/amount_holding/evm_amount_holding.rs index 638a046244..58345ea186 100644 --- a/tee-worker/litentry/core/assertion-build/src/nodereal/amount_holding/evm_amount_holding.rs +++ b/tee-worker/litentry/core/assertion-build/src/nodereal/amount_holding/evm_amount_holding.rs @@ -248,7 +248,7 @@ mod tests { #[test] fn build_evm_amount_holding_lt_min_works() { let data_provider_config = init(); - let address = decode_hex("0x85be4e2ccc9c85be8783798b6e8a101bdac6467f".as_bytes().to_vec()) + let address = decode_hex("0x85be4e2ccc9c85be8783798b6e8a101bdac6467f".as_bytes()) .unwrap() .as_slice() .try_into() @@ -305,7 +305,7 @@ mod tests { #[test] fn build_evm_amount_holding_gte_max_works() { let data_provider_config = init(); - let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e3c".as_bytes().to_vec()) + let address = decode_hex("0x75438d34c9125839c8b08d21b7f3167281659e3c".as_bytes()) .unwrap() .as_slice() .try_into() diff --git a/tee-worker/litentry/core/assertion-build/src/oneblock/mod.rs b/tee-worker/litentry/core/assertion-build/src/oneblock/mod.rs index 1cca77e43f..d0d8f71fdc 100644 --- a/tee-worker/litentry/core/assertion-build/src/oneblock/mod.rs +++ b/tee-worker/litentry/core/assertion-build/src/oneblock/mod.rs @@ -231,7 +231,7 @@ mod tests { let outstanding = check_oneblock_data( &oneblock_response, &OneBlockCourseType::CourseOutstanding, - vec![address.clone()], + vec![address], ); assert!(outstanding); } diff --git a/tee-worker/litentry/core/credentials/src/lib.rs b/tee-worker/litentry/core/credentials/src/lib.rs index 17e225c3e3..0d8381cc76 100644 --- a/tee-worker/litentry/core/credentials/src/lib.rs +++ b/tee-worker/litentry/core/credentials/src/lib.rs @@ -571,7 +571,7 @@ mod tests { #[test] fn eval_simple_success() { let who = AccountId::from([0; 32]); - let identity = who.clone().into(); + let identity = who.into(); let data = include_str!("templates/credential.json"); let shard = ShardIdentifier::default(); diff --git a/tee-worker/litentry/core/credentials/src/nodereal/bnb_domain/mod.rs b/tee-worker/litentry/core/credentials/src/nodereal/bnb_domain/mod.rs index a6dabffffd..94ad8a032a 100644 --- a/tee-worker/litentry/core/credentials/src/nodereal/bnb_domain/mod.rs +++ b/tee-worker/litentry/core/credentials/src/nodereal/bnb_domain/mod.rs @@ -84,21 +84,21 @@ mod tests { #[test] fn match_domain_amount_0_works() { let amount = 0; - let index = match_range_index(&BNB_DOMAIN_HOLDING_AMOUNT_RANGE.to_vec(), amount); + let index = match_range_index(BNB_DOMAIN_HOLDING_AMOUNT_RANGE.as_ref(), amount); assert_eq!(index.unwrap(), 1); } #[test] fn match_domain_amount_mid_works() { let amount = 20; - let index = match_range_index(&BNB_DOMAIN_HOLDING_AMOUNT_RANGE.to_vec(), amount); + let index = match_range_index(BNB_DOMAIN_HOLDING_AMOUNT_RANGE.as_ref(), amount); assert_eq!(index.unwrap(), 5); } #[test] fn match_domain_amount_last_works() { let amount = 300; - let index = match_range_index(&BNB_DOMAIN_HOLDING_AMOUNT_RANGE.to_vec(), amount); + let index = match_range_index(BNB_DOMAIN_HOLDING_AMOUNT_RANGE.as_ref(), amount); assert_eq!(index, None); } } diff --git a/tee-worker/litentry/core/data-providers/src/moralis.rs b/tee-worker/litentry/core/data-providers/src/moralis.rs index 0a7f85c9a4..93cc4c9750 100644 --- a/tee-worker/litentry/core/data-providers/src/moralis.rs +++ b/tee-worker/litentry/core/data-providers/src/moralis.rs @@ -383,7 +383,7 @@ mod tests { let mut config = DataProviderConfig::new().unwrap(); config.set_moralis_api_key("d416f55179dbd0e45b1a8ed030e3".to_string()); config.set_moralis_api_url(url.clone() + "/moralis/").unwrap(); - config.set_moralis_solana_api_url(url.clone() + "/moralis_solana/").unwrap(); + config.set_moralis_solana_api_url(url + "/moralis_solana/").unwrap(); config } diff --git a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/hex_to_number.rs b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/hex_to_number.rs index e0ed3a8e57..c4ef5777a4 100644 --- a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/hex_to_number.rs +++ b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/hex_to_number.rs @@ -129,7 +129,7 @@ pub mod integration_test { .unwrap(); // when - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // then let decoded = decode(&return_types, &return_data).unwrap(); @@ -151,7 +151,7 @@ pub mod integration_test { .unwrap(); // when - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // then let decoded = decode(&return_types, &return_data).unwrap(); diff --git a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/identity_to_string.rs b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/identity_to_string.rs index 8dc074f220..aa0f3394ed 100644 --- a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/identity_to_string.rs +++ b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/identity_to_string.rs @@ -168,7 +168,7 @@ pub mod test { // given let encoded = encode(&[ Token::Uint(network.into()), - Token::Bytes(decode_hex(address.as_bytes().to_vec()).unwrap()), + Token::Bytes(decode_hex(address.as_bytes()).unwrap()), ]); // when @@ -201,7 +201,7 @@ pub mod test { // given let encoded = encode(&[ Token::Uint(network.into()), - Token::Bytes(decode_hex(address.as_bytes().to_vec()).unwrap()), + Token::Bytes(decode_hex(address.as_bytes()).unwrap()), ]); // when @@ -219,7 +219,7 @@ pub mod test { // BitcoinP2tr let encoded = encode(&[ Token::Uint(Web3Network::BitcoinP2tr.get_code().into()), - Token::Bytes(decode_hex(address.as_bytes().to_vec()).unwrap()), + Token::Bytes(decode_hex(address.as_bytes()).unwrap()), ]); // when @@ -236,7 +236,7 @@ pub mod test { // BitcoinP2wsh let encoded = encode(&[ Token::Uint(Web3Network::BitcoinP2wsh.get_code().into()), - Token::Bytes(decode_hex(address.as_bytes().to_vec()).unwrap()), + Token::Bytes(decode_hex(address.as_bytes()).unwrap()), ]); // when @@ -312,7 +312,7 @@ pub mod integration_test { FUNCTION_HASH, encode(&[ Token::Uint(network.into()), - Token::Bytes(decode_hex(address.as_bytes().to_vec()).unwrap()), + Token::Bytes(decode_hex(address.as_bytes()).unwrap()), ]), ) .unwrap(); @@ -349,7 +349,7 @@ pub mod integration_test { FUNCTION_HASH, encode(&[ Token::Uint(network.into()), - Token::Bytes(decode_hex(address.as_bytes().to_vec()).unwrap()), + Token::Bytes(decode_hex(address.as_bytes()).unwrap()), ]), ) .unwrap(); @@ -375,11 +375,11 @@ pub mod integration_test { FUNCTION_HASH, encode(&[ Token::Uint(Web3Network::BitcoinP2tr.get_code().into()), - Token::Bytes(decode_hex(address.as_bytes().to_vec()).unwrap()), + Token::Bytes(decode_hex(address.as_bytes()).unwrap()), ]), ) .unwrap(); - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // when let decoded = decode(&return_types, &return_data).unwrap(); @@ -409,7 +409,7 @@ pub mod integration_test { .unwrap(); // when - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // then let decoded = decode(&return_types, &return_data).unwrap(); diff --git a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_decimal.rs b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_decimal.rs index 2c7a12a944..118549cc93 100644 --- a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_decimal.rs +++ b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_decimal.rs @@ -133,7 +133,7 @@ pub mod integration_test { .unwrap(); // when - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // then let decoded = decode(&return_types, &return_data).unwrap(); @@ -155,7 +155,7 @@ pub mod integration_test { .unwrap(); // when - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // then let decoded = decode(&return_types, &return_data).unwrap(); diff --git a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_int.rs b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_int.rs index 1a889e0bf6..5a39040cc7 100644 --- a/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_int.rs +++ b/tee-worker/litentry/core/evm-dynamic-assertions/src/precompiles/parse_int.rs @@ -100,7 +100,7 @@ pub mod integration_test { .unwrap(); // when - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // then let decoded = decode(&return_types, &return_data).unwrap(); @@ -122,7 +122,7 @@ pub mod integration_test { .unwrap(); // when - let (_, return_data, _) = execute_smart_contract(byte_code.clone(), input_data); + let (_, return_data, _) = execute_smart_contract(byte_code, input_data); // then let decoded = decode(&return_types, &return_data).unwrap(); diff --git a/tee-worker/litentry/core/stf-task/receiver/src/handler/assertion.rs b/tee-worker/litentry/core/stf-task/receiver/src/handler/assertion.rs index ddd742b395..9d1d1b31a9 100644 --- a/tee-worker/litentry/core/stf-task/receiver/src/handler/assertion.rs +++ b/tee-worker/litentry/core/stf-task/receiver/src/handler/assertion.rs @@ -16,18 +16,13 @@ #![allow(clippy::result_large_err)] -use crate::{ - handler::TaskHandler, EnclaveMetricsOCallApi, EnclaveOnChainOCallApi, StfTaskContext, - TrustedCall, H256, -}; +use crate::{EnclaveMetricsOCallApi, EnclaveOnChainOCallApi, StfTaskContext}; use ita_sgx_runtime::Hash; use ita_stf::{Getter, TrustedCallSigned}; use itp_sgx_crypto::{key_repository::AccessKey, ShieldingCryptoEncrypt}; -use itp_sgx_externalities::SgxExternalitiesTrait; use itp_stf_executor::traits::StfEnclaveSigning; use itp_stf_state_handler::handle_state::HandleState; use itp_top_pool_author::traits::AuthorApi; -use itp_types::ShardIdentifier; use itp_utils::stringify::account_id_to_string; use lc_credentials::credential_schema; use lc_data_providers::DataProviderConfig; @@ -48,91 +43,6 @@ use std::{ vec::Vec, }; -pub(crate) struct AssertionHandler< - ShieldingKeyRepository, - A: AuthorApi, - S: StfEnclaveSigning, - H: HandleState, - O: EnclaveOnChainOCallApi + EnclaveMetricsOCallApi, - AR: AssertionLogicRepository, -> where - ShieldingKeyRepository: AccessKey, - ::KeyType: ShieldingCryptoEncrypt + 'static, -{ - pub(crate) req: AssertionBuildRequest, - pub(crate) context: Arc>, -} - -impl TaskHandler - for AssertionHandler -where - ShieldingKeyRepository: AccessKey, - ::KeyType: ShieldingCryptoEncrypt + 'static, - A: AuthorApi, - S: StfEnclaveSigning, - H: HandleState, - H::StateT: SgxExternalitiesTrait, - O: EnclaveOnChainOCallApi + EnclaveMetricsOCallApi, - AR: AssertionLogicRepository, -{ - type Error = VCMPError; - type Result = (Vec, Option>); // (vc_byte_array, optional vc_log_byte_array) - - fn on_process(&self) -> Result { - // create the initial credential - // TODO: maybe we can further simplify this - create_credential_str(&self.req, &self.context) - } - - fn on_success( - &self, - result: Self::Result, - sender: std::sync::mpsc::Sender<(ShardIdentifier, H256, TrustedCall)>, - ) { - debug!("Assertion build OK"); - // we shouldn't have the maximum text length limit in normal RSA3072 encryption, as the payload - // using enclave's shielding key is encrypted in chunks - let vc_payload = result.0; - if let Ok(enclave_signer_account) = self.context.enclave_signer.get_enclave_account() { - let c = TrustedCall::request_vc_callback( - enclave_signer_account.into(), - self.req.who.clone(), - self.req.assertion.clone(), - vc_payload, - self.req.maybe_key, - self.req.should_create_id_graph, - self.req.req_ext_hash, - ); - if let Err(e) = sender.send((self.req.shard, self.req.top_hash, c)) { - error!("Unable to send message to the trusted_call_receiver: {:?}", e); - } - } else { - error!("can't get enclave signer"); - } - } - - fn on_failure( - &self, - error: Self::Error, - sender: std::sync::mpsc::Sender<(ShardIdentifier, H256, TrustedCall)>, - ) { - error!("Assertion build error: {error:?}"); - if let Ok(enclave_signer_account) = self.context.enclave_signer.get_enclave_account() { - let c = TrustedCall::handle_vcmp_error( - enclave_signer_account.into(), - Some(self.req.who.clone()), - error, - self.req.req_ext_hash, - ); - if let Err(e) = sender.send((self.req.shard, self.req.top_hash, c)) { - error!("Unable to send message to the trusted_call_receiver: {:?}", e); - } - } else { - error!("can't get enclave signer"); - } - } -} - fn build_holding_time( req: &AssertionBuildRequest, htype: AmountHoldingTimeType, diff --git a/tee-worker/litentry/core/stf-task/receiver/src/lib.rs b/tee-worker/litentry/core/stf-task/receiver/src/lib.rs index 141829af5c..27c1fca321 100644 --- a/tee-worker/litentry/core/stf-task/receiver/src/lib.rs +++ b/tee-worker/litentry/core/stf-task/receiver/src/lib.rs @@ -37,9 +37,7 @@ pub mod handler; use codec::Encode; use frame_support::sp_tracing::warn; use futures::{executor, executor::ThreadPoolBuilder}; -use handler::{ - assertion::AssertionHandler, identity_verification::IdentityVerificationHandler, TaskHandler, -}; +use handler::{identity_verification::IdentityVerificationHandler, TaskHandler}; use ita_sgx_runtime::Hash; use ita_stf::{Getter, TrustedCall, TrustedCallSigned}; use itp_enclave_metrics::EnclaveMetric; @@ -253,9 +251,6 @@ where RequestType::IdentityVerification(req) => IdentityVerificationHandler { req: req.clone(), context: context_pool.clone() } .start(sender_pool), - RequestType::AssertionVerification(req) => - AssertionHandler { req: req.clone(), context: context_pool.clone() } - .start(sender_pool), } if let Err(e) = diff --git a/tee-worker/litentry/core/stf-task/receiver/src/mock.rs b/tee-worker/litentry/core/stf-task/receiver/src/mock.rs index 015ff8317a..8ecd0452bf 100644 --- a/tee-worker/litentry/core/stf-task/receiver/src/mock.rs +++ b/tee-worker/litentry/core/stf-task/receiver/src/mock.rs @@ -1,10 +1,5 @@ -use super::*; -use base58::FromBase58; -use codec::Decode; use itp_top_pool_author::{error::Result, mocks::GLOBAL_MOCK_AUTHOR_API}; -use lc_stf_task_sender::AssertionBuildRequest; -use litentry_primitives::{Assertion, RequestAesKey}; -use sp_core::{blake2_256, sr25519, Pair}; + use std::{sync::mpsc::Receiver, vec::Vec}; pub const COMMON_SEED: &[u8] = @@ -16,39 +11,3 @@ pub fn init_global_mock_author_api() -> Result>> { *stf_task_storage = Some(sender); Ok(receiver) } - -pub fn construct_assertion_request(assertion: Assertion) -> RequestType { - let s: String = String::from("751h9re4VmXYTEyFtsVPDm7H8PHgbz9D3guUSd1vKyUf"); - let s = s.from_base58().unwrap(); - let shard: ShardIdentifier = ShardIdentifier::decode(&mut &s[..]).unwrap(); - - let seed = blake2_256(COMMON_SEED).to_vec(); - let pair = sr25519::Pair::from_seed_slice(&seed) - .expect("Failed to create a key pair from the provided seed"); - let public_id = pair.public(); - - let mut key = RequestAesKey::default(); - hex::decode_to_slice( - "22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12", - &mut key, - ) - .expect("decoding shielding_key failed"); - - let request: RequestType = AssertionBuildRequest { - shard, - signer: public_id.into(), - who: public_id.into(), - assertion, - identities: vec![], - maybe_key: Some(key), - parachain_block_number: 0u32, - sidechain_block_number: 0u32, - parachain_runtime_version: 0u32, - sidechain_runtime_version: 0u32, - top_hash: H256::zero(), - should_create_id_graph: false, - req_ext_hash: H256::zero(), - } - .into(); - request -} diff --git a/tee-worker/litentry/core/stf-task/receiver/src/test.rs b/tee-worker/litentry/core/stf-task/receiver/src/test.rs index 8be7805aa1..f606862c33 100644 --- a/tee-worker/litentry/core/stf-task/receiver/src/test.rs +++ b/tee-worker/litentry/core/stf-task/receiver/src/test.rs @@ -1,78 +1,3 @@ use super::*; -use mock::*; -use codec::Decode; -use ita_stf::{TrustedCall, TrustedCallSigned}; -use itp_sgx_crypto::{mocks::KeyRepositoryMock, ShieldingCryptoDecrypt}; -use itp_stf_executor::mocks::StfEnclaveSignerMock; -use itp_test::mock::{ - handle_state_mock::HandleStateMock, onchain_mock::OnchainMock, - shielding_crypto_mock::ShieldingCryptoMock, -}; -use itp_top_pool_author::mocks::AuthorApiMock; -use lc_evm_dynamic_assertions::repository::EvmAssertionRepository; -use lc_stf_task_sender::{SendStfRequest, StfRequestSender}; -use litentry_primitives::Assertion; -use sp_core::{ed25519::Pair as Ed25519Pair, Pair}; - -#[test] -fn test_threadpool_behaviour() { - let shielding_key = ShieldingCryptoMock::default(); - let shielding_key_repository_mock = KeyRepositoryMock::new(shielding_key.clone()); - let author_mock = AuthorApiMock::default(); - let stf_enclave_signer_mock = StfEnclaveSignerMock::default(); - let enclave_account = Ed25519Pair::from_string("//Alice", None).unwrap(); - let handle_state_mock = HandleStateMock::default(); - let onchain_mock = OnchainMock::default(); - let data_provider_conifg = DataProviderConfig::new().unwrap(); - let assertion_repository = EvmAssertionRepository::new(Default::default()).unwrap(); - let context = StfTaskContext::new( - Arc::new(shielding_key_repository_mock), - author_mock.into(), - stf_enclave_signer_mock.into(), - enclave_account.into(), - handle_state_mock.into(), - onchain_mock.into(), - data_provider_conifg.into(), - assertion_repository.into(), - ); - let _handle = std::thread::spawn(move || { - run_stf_task_receiver(Arc::new(context)).unwrap(); - }); - - let sender = StfRequestSender::default(); - - // Sleep in order to initialize the components - std::thread::sleep(core::time::Duration::from_secs(2)); - - sender.send_stf_request(construct_assertion_request(Assertion::A1)).unwrap(); - sender.send_stf_request(construct_assertion_request(Assertion::A6)).unwrap(); - - let receiver = init_global_mock_author_api().unwrap(); - // As you see in the expected output, We receive A6 first even though A1 is requested first and is put to sleep - let mut expected_output: Vec = vec![Assertion::A6, Assertion::A1]; - - let timeout_duration = core::time::Duration::from_secs(30); - let start_time = std::time::Instant::now(); - - while let Ok(ext) = receiver.recv() { - let decrypted = shielding_key.decrypt(&ext).unwrap(); - let decoded = - TrustedOperation::::decode(&mut decrypted.as_ref()).unwrap(); - if let TrustedOperation::direct_call(TrustedCallSigned { - call: TrustedCall::request_vc_callback(_, _, assertion, ..), - .. - }) = decoded - { - assert_eq!(expected_output.remove(0), assertion); - } - if expected_output.len() == 0 { - break - } - - // Timeout condition - if start_time.elapsed() > timeout_duration { - assert!(false, "Test exceeded the 60-second timeout"); - } - } -} +// TODO: shall we rewrite the thread-pool test? diff --git a/tee-worker/litentry/core/stf-task/sender/src/request.rs b/tee-worker/litentry/core/stf-task/sender/src/request.rs index d686f5bab8..2983c0d979 100644 --- a/tee-worker/litentry/core/stf-task/sender/src/request.rs +++ b/tee-worker/litentry/core/stf-task/sender/src/request.rs @@ -84,8 +84,6 @@ pub struct AssertionBuildRequest { pub enum RequestType { #[codec(index = 0)] IdentityVerification(Web2IdentityVerificationRequest), - #[codec(index = 1)] - AssertionVerification(AssertionBuildRequest), } impl From for RequestType { @@ -93,9 +91,3 @@ impl From for RequestType { RequestType::IdentityVerification(r) } } - -impl From for RequestType { - fn from(r: AssertionBuildRequest) -> Self { - RequestType::AssertionVerification(r) - } -} diff --git a/tee-worker/litentry/pallets/identity-management/src/tests.rs b/tee-worker/litentry/pallets/identity-management/src/tests.rs index b40c07d1e3..b2365d5222 100644 --- a/tee-worker/litentry/pallets/identity-management/src/tests.rs +++ b/tee-worker/litentry/pallets/identity-management/src/tests.rs @@ -175,12 +175,7 @@ fn link_identity_fails_for_linked_identity() { // alice -> charlie NOK, as alice is already in bob's IDGraph assert_err!( - IMT::link_identity( - RuntimeOrigin::signed(ALICE), - alice.clone(), - charlie.clone(), - web3networks, - ), + IMT::link_identity(RuntimeOrigin::signed(ALICE), alice.clone(), charlie, web3networks,), Error::::IdentityAlreadyLinked ); @@ -242,7 +237,7 @@ fn cannot_create_more_identities_for_account_than_limit() { assert_err!( IMT::link_identity( RuntimeOrigin::signed(ALICE), - who.clone(), + who, alice_twitter_identity(65), vec![], ), @@ -279,9 +274,9 @@ fn deactivate_identity_works() { } ); - let id_graph = IMT::id_graph(&who.clone()); + let id_graph = IMT::id_graph(&who); assert_eq!(id_graph.len(), 2); - assert_eq!(crate::IDGraphLens::::get(&who.clone()), 2); + assert_eq!(crate::IDGraphLens::::get(&who), 2); assert_ok!(IMT::deactivate_identity( RuntimeOrigin::signed(ALICE), @@ -297,19 +292,19 @@ fn deactivate_identity_works() { } ); - let id_graph = IMT::id_graph(&who.clone()) + let id_graph = IMT::id_graph(&who) .into_iter() .filter(|(_, c)| c.is_active()) .collect::>(); // "1": because of the main id is added by default when first calling link_identity. assert_eq!(id_graph.len(), 1); - assert_eq!(IMT::id_graph(&who.clone()).len(), 2); + assert_eq!(IMT::id_graph(&who).len(), 2); // identity is only deactivated, so it still exists - assert_eq!(crate::IDGraphLens::::get(&who.clone()), 2); + assert_eq!(crate::IDGraphLens::::get(&who), 2); assert_ok!(IMT::deactivate_identity( RuntimeOrigin::signed(ALICE), - who.clone(), + who, bob_substrate_identity(), )); }); @@ -334,9 +329,9 @@ fn activate_identity_works() { status: IdentityStatus::Active } ); - let id_graph = IMT::id_graph(&who.clone()); + let id_graph = IMT::id_graph(&who); assert_eq!(id_graph.len(), 2); - assert_eq!(crate::IDGraphLens::::get(&who.clone()), 2); + assert_eq!(crate::IDGraphLens::::get(&who), 2); assert_ok!(IMT::deactivate_identity( RuntimeOrigin::signed(ALICE), @@ -351,14 +346,14 @@ fn activate_identity_works() { status: IdentityStatus::Inactive } ); - let id_graph = IMT::id_graph(&who.clone()) + let id_graph = IMT::id_graph(&who) .into_iter() .filter(|(_, c)| c.is_active()) .collect::>(); // "1": because of the main id is added by default when first calling link_identity. assert_eq!(id_graph.len(), 1); // identity is only deactivated, so it still exists - assert_eq!(crate::IDGraphLens::::get(&who.clone()), 2); + assert_eq!(crate::IDGraphLens::::get(&who), 2); assert_ok!(IMT::activate_identity( RuntimeOrigin::signed(ALICE), @@ -366,9 +361,9 @@ fn activate_identity_works() { alice_substrate_identity(), )); - let id_graph = IMT::id_graph(&who.clone()); + let id_graph = IMT::id_graph(&who); assert_eq!(id_graph.len(), 2); - assert_eq!(crate::IDGraphLens::::get(&who.clone()), 2); + assert_eq!(crate::IDGraphLens::::get(&who), 2); }); } @@ -550,7 +545,7 @@ fn id_graph_stats_works() { // alice's IDGraph should have 3 entries: // alice's identity itself, bob_substrate_identity, alice_twitter_identity assert_eq!(stats.len(), 1); - assert!(stats.contains(&(alice.clone(), 3))); + assert!(stats.contains(&(alice, 3))); }); } @@ -626,7 +621,7 @@ fn remove_identity_graph_of_other_account_fails() { )); assert_ok!(IMT::link_identity( RuntimeOrigin::signed(ALICE), - alice.clone(), + alice, alice_twitter_identity(1), vec![], )); diff --git a/tee-worker/service/src/prometheus_metrics.rs b/tee-worker/service/src/prometheus_metrics.rs index cdc983ceff..69235686ec 100644 --- a/tee-worker/service/src/prometheus_metrics.rs +++ b/tee-worker/service/src/prometheus_metrics.rs @@ -281,7 +281,6 @@ fn handle_stf_call_request(req: RequestType, time: f64) { // Determine the category based on the request type let category = match req { RequestType::IdentityVerification(_) => "link_identity", - RequestType::AssertionVerification(_) => "request_vc", }; let label: String = match req { @@ -294,7 +293,6 @@ fn handle_stf_call_request(req: RequestType, time: f64) { Identity::Bitcoin(_) => "Bitcoin".into(), Identity::Solana(_) => "Solana".into(), }, - RequestType::AssertionVerification(request) => assertion_to_string(request.assertion), }; inc_stf_calls(category, &label); observe_execution_time(category, &label, time) diff --git a/tee-worker/service/src/setup.rs b/tee-worker/service/src/setup.rs index 35ec8715d9..e8c5751ea6 100644 --- a/tee-worker/service/src/setup.rs +++ b/tee-worker/service/src/setup.rs @@ -198,7 +198,7 @@ mod tests { fs::File::create(&root_directory.join(ASSERTIONS_FILE)).unwrap(); - purge_files(&root_directory).unwrap(); + purge_files(root_directory).unwrap(); assert!(!shards_path.exists()); assert!(!sidechain_db_path.exists()); @@ -216,7 +216,7 @@ mod tests { )); let root_directory = test_directory_handle.path(); - assert!(purge_files(&root_directory).is_ok()); + assert!(purge_files(root_directory).is_ok()); } #[test] diff --git a/tee-worker/sidechain/consensus/aura/src/lib.rs b/tee-worker/sidechain/consensus/aura/src/lib.rs index aa3f38a7da..f43fd57c59 100644 --- a/tee-worker/sidechain/consensus/aura/src/lib.rs +++ b/tee-worker/sidechain/consensus/aura/src/lib.rs @@ -386,7 +386,7 @@ mod tests { use itc_parentchain_test::{ParentchainBlockBuilder, ParentchainHeaderBuilder}; use itp_test::mock::onchain_mock::OnchainMock; use itp_types::{ - AccountId, Block as ParentchainBlock, Header as ParentchainHeader, ShardIdentifier, + AccountId, Block as ParentchainBlock, Header as ParentchainHeader, SignedBlock as SignedParentchainBlock, }; use its_consensus_slots::PerShardSlotWorkerScheduler; @@ -447,7 +447,7 @@ mod tests { } fn create_validateer_set_from_publics(authorities: Vec) -> Vec { - authorities.iter().map(|a| AccountId::from(a.clone())).collect() + authorities.iter().map(|a| AccountId::from(*a)).collect() } fn onchain_mock( diff --git a/tee-worker/sidechain/consensus/aura/src/test/block_importer_tests.rs b/tee-worker/sidechain/consensus/aura/src/test/block_importer_tests.rs index 2c153d8c3d..fe2c632ccc 100644 --- a/tee-worker/sidechain/consensus/aura/src/test/block_importer_tests.rs +++ b/tee-worker/sidechain/consensus/aura/src/test/block_importer_tests.rs @@ -136,7 +136,7 @@ fn signed_block( let block_data = SidechainBlockDataBuilder::default() .with_timestamp(now_as_millis()) .with_layer_one_head(parentchain_header.hash()) - .with_signer(signer.clone()) + .with_signer(signer) .with_payload(state_update) .build(); diff --git a/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs b/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs index 040e812b12..ce93ad2485 100644 --- a/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs +++ b/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs @@ -17,7 +17,7 @@ use crate::Aura; use itc_parentchain_block_import_dispatcher::trigger_parentchain_block_import_mock::TriggerParentchainBlockImportMock; -use itp_test::mock::{handle_state_mock::HandleStateMock, onchain_mock::OnchainMock}; +use itp_test::mock::onchain_mock::OnchainMock; use itp_types::Block as ParentchainBlock; use its_primitives::{ traits::{ diff --git a/tee-worker/sidechain/consensus/slots/src/mocks.rs b/tee-worker/sidechain/consensus/slots/src/mocks.rs index 971ee1c942..8410ea1b14 100644 --- a/tee-worker/sidechain/consensus/slots/src/mocks.rs +++ b/tee-worker/sidechain/consensus/slots/src/mocks.rs @@ -20,7 +20,7 @@ pub use itp_test::mock::handle_state_mock::HandleStateMock; use its_consensus_common::{Proposal, Proposer, Result}; use its_primitives::{traits::ShardIdentifierFor, types::SignedBlock as SignedSidechainBlock}; use sp_runtime::traits::{Block as ParentchainBlockTrait, Header as ParentchainHeaderTrait}; -use std::{marker::PhantomData, sync::Arc, thread, time::Duration}; +use std::{marker::PhantomData, thread, time::Duration}; #[derive(Default)] pub(crate) struct ProposerMock { diff --git a/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs b/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs index b9bcaf92f0..52aa2593fe 100644 --- a/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs +++ b/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs @@ -74,12 +74,8 @@ fn if_shard_takes_up_all_slot_time_subsequent_shards_are_not_served() { let shards = vec![ShardIdentifier::default(), ShardIdentifier::default(), ShardIdentifier::default()]; - let _slot_results = PerShardSlotWorkerScheduler::on_slot( - &mut slot_worker, - slot_info.clone(), - shards.clone(), - false, - ); + let _slot_results = + PerShardSlotWorkerScheduler::on_slot(&mut slot_worker, slot_info, shards, false); assert_eq!(1, slot_worker.slot_infos.len()); } diff --git a/tee-worker/sidechain/fork-tree/src/lib.rs b/tee-worker/sidechain/fork-tree/src/lib.rs index 3e2adc78c3..287cf885d7 100644 --- a/tee-worker/sidechain/fork-tree/src/lib.rs +++ b/tee-worker/sidechain/fork-tree/src/lib.rs @@ -1542,7 +1542,7 @@ mod test { assert_eq!(path, [0, 1, 0, 0, 0]); // Post order traversal requirement for `import` - let res = tree.import(&"Z", 100, (), &is_descendent_of_for_post_order); + let res = tree.import("Z", 100, (), &is_descendent_of_for_post_order); assert_eq!(res, Ok(false)); assert_eq!( tree.iter().map(|node| *node.0).collect::>(), diff --git a/tee-worker/sidechain/primitives/src/types/block.rs b/tee-worker/sidechain/primitives/src/types/block.rs index 8e7902d62d..70bd1cf526 100644 --- a/tee-worker/sidechain/primitives/src/types/block.rs +++ b/tee-worker/sidechain/primitives/src/types/block.rs @@ -123,7 +123,7 @@ mod tests { fn test_block() -> Block { let header = Header::new(0, H256::random(), H256::random(), Default::default(), 1); let block_data = BlockData::new( - ed25519::Pair::from_string("//Alice", None).unwrap().public().into(), + ed25519::Pair::from_string("//Alice", None).unwrap().public(), H256::random(), Default::default(), Default::default(), @@ -138,8 +138,7 @@ mod tests { let block = test_block(); let signer = ed25519::Pair::from_string("//Alice", None).unwrap(); - let signature: Signature = - Signature::Ed25519(signer.sign(block.encode().as_slice().into())); + let signature: Signature = Signature::Ed25519(signer.sign(block.encode().as_slice())); let signed_block: SignedBlock = block.clone().sign_block(&signer); assert_eq!(signed_block.block(), &block); diff --git a/tee-worker/sidechain/storage/src/storage.rs b/tee-worker/sidechain/storage/src/storage.rs index bf97167f89..aa56e96935 100644 --- a/tee-worker/sidechain/storage/src/storage.rs +++ b/tee-worker/sidechain/storage/src/storage.rs @@ -441,7 +441,7 @@ mod test { // ensure db starts empty assert!(sidechain_db.load_last_block_from_db(&shard).unwrap().is_none()); // write signed_block to db - sidechain_db.db.put((LAST_BLOCK_KEY, shard), signed_last_block.clone()).unwrap(); + sidechain_db.db.put((LAST_BLOCK_KEY, shard), signed_last_block).unwrap(); } // then @@ -469,7 +469,7 @@ mod test { // ensure db starts empty assert!(sidechain_db.load_last_block_from_db(&shard).unwrap().is_none()); // write shards to db - sidechain_db.db.put((LAST_BLOCK_KEY, shard), signed_last_block.clone()).unwrap(); + sidechain_db.db.put((LAST_BLOCK_KEY, shard), signed_last_block).unwrap(); // write shards to db sidechain_db.db.put(STORED_SHARDS_KEY, shard_vector.clone()).unwrap(); } @@ -582,7 +582,7 @@ mod test { .db .put((shard, signed_block.block().header().block_number()), signed_block.hash()) .unwrap(); - sidechain_db.db.put((LAST_BLOCK_KEY, shard), last_block.clone()).unwrap(); + sidechain_db.db.put((LAST_BLOCK_KEY, shard), last_block).unwrap(); assert_eq!( sidechain_db .db @@ -650,7 +650,7 @@ mod test { sidechain_db.shards.push(shard); sidechain_db.last_blocks.insert(shard, last_block); // when - let result = sidechain_db.verify_block_ancestry(&signed_block_two.block()); + let result = sidechain_db.verify_block_ancestry(signed_block_two.block()); // then assert!(result); @@ -673,7 +673,7 @@ mod test { sidechain_db.last_blocks.insert(shard, last_block); // when - let result = sidechain_db.verify_block_ancestry(&signed_block_two.block()); + let result = sidechain_db.verify_block_ancestry(signed_block_two.block()); // then assert!(!result); @@ -689,7 +689,7 @@ mod test { let mut sidechain_db = get_storage(temp_dir.path().to_path_buf()); sidechain_db.shards.push(shard); // when - let result = sidechain_db.verify_block_ancestry(&signed_block.block()); + let result = sidechain_db.verify_block_ancestry(signed_block.block()); // then assert!(!result); @@ -703,7 +703,7 @@ mod test { let signed_block = create_signed_block(8, shard); { let sidechain_db = get_storage(temp_dir.path().to_path_buf()); - let result = sidechain_db.verify_block_ancestry(&signed_block.block()); + let result = sidechain_db.verify_block_ancestry(signed_block.block()); assert!(!result); } } diff --git a/tee-worker/sidechain/storage/src/storage_tests_get_blocks_after.rs b/tee-worker/sidechain/storage/src/storage_tests_get_blocks_after.rs index 0795e54ca7..98ece0c510 100644 --- a/tee-worker/sidechain/storage/src/storage_tests_get_blocks_after.rs +++ b/tee-worker/sidechain/storage/src/storage_tests_get_blocks_after.rs @@ -90,7 +90,7 @@ fn get_blocks_after_returns_all_blocks_if_last_known_is_default() { let block_2 = create_signed_block(2, block_1.hash()); let block_3 = create_signed_block(3, block_2.hash()); - let blocks = vec![block_1.clone(), block_2.clone(), block_3.clone()]; + let blocks = vec![block_1, block_2, block_3]; let temp_dir = fill_storage_with_blocks(blocks.clone()); diff --git a/tee-worker/sidechain/storage/src/storage_tests_get_blocks_in_range.rs b/tee-worker/sidechain/storage/src/storage_tests_get_blocks_in_range.rs index c0c505d4d0..a30f1ba712 100644 --- a/tee-worker/sidechain/storage/src/storage_tests_get_blocks_in_range.rs +++ b/tee-worker/sidechain/storage/src/storage_tests_get_blocks_in_range.rs @@ -57,12 +57,7 @@ fn get_blocks_in_range_returns_empty_vec_if_from_is_invalid() { let block_3 = create_signed_block(3, block_2.hash()); let block_4 = create_signed_block(4, block_3.hash()); - let temp_dir = fill_storage_with_blocks(vec![ - block_1.clone(), - block_2.clone(), - block_3.clone(), - block_4.clone(), - ]); + let temp_dir = fill_storage_with_blocks(vec![block_1, block_2, block_3.clone(), block_4]); { let updated_sidechain_db = get_storage(temp_dir.path().to_path_buf()); @@ -84,10 +79,10 @@ fn get_blocks_in_range_returns_all_blocks_if_upper_bound_is_invalid() { let block_5 = create_signed_block(5, block_4.hash()); let temp_dir = fill_storage_with_blocks(vec![ - block_1.clone(), + block_1, block_2.clone(), block_3.clone(), - block_4.clone(), + block_4, block_5.clone(), ]); diff --git a/tee-worker/ts-tests/integration-tests/common/di-utils.ts b/tee-worker/ts-tests/integration-tests/common/di-utils.ts index 97d55fa8bd..6355c6c97a 100644 --- a/tee-worker/ts-tests/integration-tests/common/di-utils.ts +++ b/tee-worker/ts-tests/integration-tests/common/di-utils.ts @@ -387,7 +387,6 @@ export const sendRequestFromTrustedCall = async ( context: IntegrationTestContext, teeShieldingKey: KeyObject, call: TrustedCallSigned, - isVcDirect = false, onMessageReceived?: (res: WorkerRpcReturnValue) => void ) => { // construct trusted operation @@ -401,8 +400,10 @@ export const sendRequestFromTrustedCall = async ( hexToU8a(aesKey), trustedOperation.toU8a() ); + + const isRequestVc = call.call.isRequestVc || call.call.isRequestBatchVc; const request = createJsonRpcRequest( - isVcDirect ? 'author_requestVc' : 'author_submitAndWatchAesRequest', + isRequestVc ? 'author_requestVc' : 'author_submitAndWatchAesRequest', [u8aToHex(requestParam)], nextRequestId(context) ); diff --git a/tee-worker/ts-tests/integration-tests/di_vc.test.ts b/tee-worker/ts-tests/integration-tests/di_vc.test.ts deleted file mode 100644 index 926506b830..0000000000 --- a/tee-worker/ts-tests/integration-tests/di_vc.test.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { randomBytes, KeyObject } from 'crypto'; -import { step } from 'mocha-steps'; -import { buildWeb2Validation, initIntegrationTestContext } from './common/utils'; -import { assertIsInSidechainBlock, assertVc } from './common/utils/assertion'; -import { - getSidechainNonce, - createSignedTrustedCallLinkIdentity, - getTeeShieldingKey, - sendRequestFromTrustedCall, - createSignedTrustedCallRequestVc, - createSignedTrustedCall, -} from './common/di-utils'; // @fixme move to a better place -import { buildIdentityHelper, buildValidations } from './common/utils'; -import type { IntegrationTestContext } from './common/common-types'; -import { aesKey } from './common/call'; -import type { CorePrimitivesIdentity } from 'parachain-api'; -import { mockAssertions } from './common/utils/vc-helper'; -import type { LitentryValidationData, Web3Network } from 'parachain-api'; -import type { Vec, Bytes } from '@polkadot/types'; -import { assert } from 'chai'; - -describe('Test Vc (direct invocation)', function () { - let context: IntegrationTestContext = undefined as any; - let teeShieldingKey: KeyObject = undefined as any; - let aliceSubstrateIdentity: CorePrimitivesIdentity = undefined as any; - - // Alice links: - // - a `mock_user` twitter - // - alice's evm identity - // - alice's bitcoin identity] - // - // We need this linking to not have empty eligible identities for any vc request - const linkIdentityRequestParams: { - nonce: number; - identity: CorePrimitivesIdentity; - validation: LitentryValidationData; - networks: Bytes | Vec; - }[] = []; - this.timeout(6000000); - - before(async () => { - context = await initIntegrationTestContext( - process.env.PARACHAIN_ENDPOINT! // @fixme evil assertion; centralize env access - ); - teeShieldingKey = await getTeeShieldingKey(context); - aliceSubstrateIdentity = await context.web3Wallets.substrate.Alice.getIdentity(context); - }); - - step('linking identities (alice)', async function () { - let currentNonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); - const getNextNonce = () => currentNonce++; - - const twitterNonce = getNextNonce(); - const twitterIdentity = await buildIdentityHelper('mock_user', 'Twitter', context); - const twitterValidation = await buildWeb2Validation({ - identityType: 'Twitter', - context, - signerIdentitity: aliceSubstrateIdentity, - linkIdentity: twitterIdentity, - verificationType: 'PublicTweet', - validationNonce: twitterNonce, - }); - const twitterNetworks = context.api.createType('Vec', []); - linkIdentityRequestParams.push({ - nonce: twitterNonce, - identity: twitterIdentity, - validation: twitterValidation, - networks: twitterNetworks, - }); - - const evmNonce = getNextNonce(); - - const evmIdentity = await context.web3Wallets.evm.Alice.getIdentity(context); - const evmValidation = await buildValidations( - context, - aliceSubstrateIdentity, - evmIdentity, - evmNonce, - 'ethereum', - context.web3Wallets.evm.Alice - ); - const evmNetworks = context.api.createType('Vec', ['Ethereum', 'Bsc']); - linkIdentityRequestParams.push({ - nonce: evmNonce, - identity: evmIdentity, - validation: evmValidation, - networks: evmNetworks, - }); - - const bitcoinNonce = getNextNonce(); - - const bitcoinIdentity = await context.web3Wallets.bitcoin.Alice.getIdentity(context); - console.log('bitcoin id: ', bitcoinIdentity.toHuman()); - const bitcoinValidation = await buildValidations( - context, - aliceSubstrateIdentity, - bitcoinIdentity, - bitcoinNonce, - 'bitcoin', - context.web3Wallets.bitcoin.Alice - ); - const bitcoinNetworks = context.api.createType('Vec', ['BitcoinP2tr']); - linkIdentityRequestParams.push({ - nonce: bitcoinNonce, - identity: bitcoinIdentity, - validation: bitcoinValidation, - networks: bitcoinNetworks, - }); - - let counter = 0; - for (const { nonce, identity, validation, networks } of linkIdentityRequestParams) { - counter++; - const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; - const linkIdentityCall = await createSignedTrustedCallLinkIdentity( - context.api, - context.mrEnclave, - context.api.createType('Index', nonce), - context.web3Wallets.substrate.Alice, - aliceSubstrateIdentity, - identity.toHex(), - validation.toHex(), - networks.toHex(), - context.api.createType('Option', aesKey).toHex(), - requestIdentifier, - { - withWrappedBytes: false, - withPrefix: counter % 2 === 0, // alternate per entry - } - ); - - const res = await sendRequestFromTrustedCall(context, teeShieldingKey, linkIdentityCall); - await assertIsInSidechainBlock('linkIdentityCall', res); - } - }); - - mockAssertions.forEach(({ description, assertion }, index) => { - step(`request vc payload : ${JSON.stringify(assertion)} (alice)`, async function () { - let currentNonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); - const getNextNonce = () => currentNonce++; - const nonce = getNextNonce(); - const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; - console.log(`request vc ${Object.keys(assertion)[0]} for Alice ... Assertion description: ${description}`); - - const requestVcCall = await createSignedTrustedCallRequestVc( - context.api, - context.mrEnclave, - context.api.createType('Index', nonce), - context.web3Wallets.substrate.Alice, - aliceSubstrateIdentity, - context.api.createType('Assertion', assertion).toHex(), - context.api.createType('Option', aesKey).toHex(), - requestIdentifier, - { - withWrappedBytes: false, - withPrefix: index % 2 === 0, // alternate per entry - } - ); - - const res = await sendRequestFromTrustedCall(context, teeShieldingKey, requestVcCall); - await assertIsInSidechainBlock(`${Object.keys(assertion)[0]} requestVcCall`, res); - - await assertVc(context, aliceSubstrateIdentity, res.value); - }); - }); - - step('request invalid vc with different primeIdentities', async function () { - let currentNonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); - const getNextNonce = () => currentNonce++; - const nonce = getNextNonce(); - const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; - const bobSubstrateIdentity = await context.web3Wallets.substrate.Bob.getIdentity(context); - const eveSubstrateIdentity = await context.web3Wallets.substrate.Eve.getIdentity(context); - const call = await createSignedTrustedCall( - context.api, - ['request_vc', '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)'], - context.web3Wallets.substrate.Alice, - context.mrEnclave, - context.api.createType('Index', nonce), - [ - eveSubstrateIdentity.toHuman(), - bobSubstrateIdentity.toHuman(), - context.api.createType('Assertion', { A1: 'A1' }).toHex(), - aesKey, - requestIdentifier, - ] - ); - - const res = await sendRequestFromTrustedCall(context, teeShieldingKey, call); - console.log('requestInvalidVc call returned', res.toHuman()); - assert.isTrue(res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid); - }); -}); diff --git a/tee-worker/ts-tests/integration-tests/dr_vc.test.ts b/tee-worker/ts-tests/integration-tests/dr_vc.test.ts index 47ed801e8e..a8d469eb69 100644 --- a/tee-worker/ts-tests/integration-tests/dr_vc.test.ts +++ b/tee-worker/ts-tests/integration-tests/dr_vc.test.ts @@ -163,7 +163,6 @@ describe('Test Vc (direct request)', function () { ); } - const isVcDirect = true; // Instead of waiting for final response we will listen all responses from the call const onMessageReceived = async (res: WorkerRpcReturnValue) => { // if response is a A1 or A2, etc.... @@ -174,13 +173,7 @@ describe('Test Vc (direct request)', function () { const eventsPromise = subscribeToEventsWithExtHash(requestIdentifier, context); // the +res+ below is the last message with "do_watch: false" property and we may not need it at all - const res = await sendRequestFromTrustedCall( - context, - teeShieldingKey, - requestVcCall, - isVcDirect, - onMessageReceived - ); + const res = await sendRequestFromTrustedCall(context, teeShieldingKey, requestVcCall, onMessageReceived); const events = (await eventsPromise).map(({ event }) => event); assert.equal(events.length, Array.isArray(assertion) ? assertion.length : 1);