diff --git a/tee-worker/litentry/core/data-providers/src/geniidata.rs b/tee-worker/litentry/core/data-providers/src/geniidata.rs index 2586ae3305..fb8a7bdaf7 100644 --- a/tee-worker/litentry/core/data-providers/src/geniidata.rs +++ b/tee-worker/litentry/core/data-providers/src/geniidata.rs @@ -20,15 +20,12 @@ use crate::sgx_reexport_prelude::*; #[cfg(all(not(feature = "std"), feature = "sgx"))] extern crate sgx_tstd as std; -use crate::{ - build_client, Error as DataProviderError, - GLOBAL_DATA_PROVIDER_CONFIG, -}; +use crate::{build_client, Error as DataProviderError, GLOBAL_DATA_PROVIDER_CONFIG}; use http::header::ACCEPT; use http_req::response::Headers; use itc_rest_client::{ error::Error as RestClientError, - http_client::{HttpClient, DefaultSend}, + http_client::{DefaultSend, HttpClient}, rest_client::RestClient, RestGet, RestPath, }; @@ -82,9 +79,15 @@ impl GeniidataClient { pub fn new() -> Self { let mut headers = Headers::new(); headers.insert(ACCEPT.as_str(), "application/json"); - headers.insert("api-key", GLOBAL_DATA_PROVIDER_CONFIG.read().unwrap().geniidata_api_key.as_str()); + headers.insert( + "api-key", + GLOBAL_DATA_PROVIDER_CONFIG.read().unwrap().geniidata_api_key.as_str(), + ); - let client = build_client(GLOBAL_DATA_PROVIDER_CONFIG.read().unwrap().geniidata_url.as_str(), headers); + let client = build_client( + GLOBAL_DATA_PROVIDER_CONFIG.read().unwrap().geniidata_url.as_str(), + headers, + ); GeniidataClient { client } } diff --git a/tee-worker/litentry/pallets/identity-management/src/lib.rs b/tee-worker/litentry/pallets/identity-management/src/lib.rs index c491ddcb5d..40a2f2b89c 100644 --- a/tee-worker/litentry/pallets/identity-management/src/lib.rs +++ b/tee-worker/litentry/pallets/identity-management/src/lib.rs @@ -42,7 +42,8 @@ use frame_support::{pallet_prelude::*, traits::StorageVersion}; use frame_system::pallet_prelude::*; pub use litentry_primitives::{ - all_substrate_web3networks, Identity, ParentchainBlockNumber, UserShieldingKeyType, Web3Network, + all_bitcoin_web3networks, all_evm_web3networks, all_substrate_web3networks, Identity, + ParentchainBlockNumber, UserShieldingKeyType, Web3Network, }; use sp_std::vec::Vec; @@ -170,13 +171,28 @@ pub mod pallet { ); ensure!(identity != who, Error::::LinkPrimeIdentityDisallowed); - ensure!( - identity.matches_web3networks(web3networks.as_ref()), - Error::::WrongWeb3NetworkTypes - ); + let mut adjusted_web3networks = web3networks; + + // To reduce the encoded call size, the client has a workaround on `staging` branch to + // pass in empty `web3networks`, we'll need to restore it to full network types + if identity.is_web3() && adjusted_web3networks.is_empty() { + adjusted_web3networks = match identity { + Identity::Substrate(..) => all_substrate_web3networks(), + Identity::Evm(..) => all_evm_web3networks(), + Identity::Bitcoin(..) => all_bitcoin_web3networks(), + _ => Vec::new(), + }; + } else { + ensure!( + identity.matches_web3networks(adjusted_web3networks.as_ref()), + Error::::WrongWeb3NetworkTypes + ); + } - let context = - >::new(>::block_number(), web3networks); + let context = >::new( + >::block_number(), + adjusted_web3networks, + ); Self::insert_identity_with_limit(&who, &identity, context)?; Self::deposit_event(Event::IdentityLinked { who, identity }); Ok(()) diff --git a/tee-worker/litentry/pallets/identity-management/src/mock.rs b/tee-worker/litentry/pallets/identity-management/src/mock.rs index c826c2b067..fc9ce65092 100644 --- a/tee-worker/litentry/pallets/identity-management/src/mock.rs +++ b/tee-worker/litentry/pallets/identity-management/src/mock.rs @@ -22,7 +22,7 @@ use frame_support::{ }; use frame_system as system; use frame_system::EnsureSignedBy; -use litentry_primitives::{Identity, IdentityString, USER_SHIELDING_KEY_LEN}; +use litentry_primitives::{Identity, IdentityString, Web3Network, USER_SHIELDING_KEY_LEN}; use sp_core::H256; use sp_runtime::{ testing::Header, @@ -140,7 +140,7 @@ pub fn new_test_ext(set_shielding_key: bool) -> sp_io::TestExternalities { RuntimeOrigin::signed(ALICE), who, shielding_key.clone(), - vec![], + vec![Web3Network::Litentry], ); } }); diff --git a/tee-worker/litentry/pallets/identity-management/src/tests.rs b/tee-worker/litentry/pallets/identity-management/src/tests.rs index 50da573028..3f0d3d80dd 100644 --- a/tee-worker/litentry/pallets/identity-management/src/tests.rs +++ b/tee-worker/litentry/pallets/identity-management/src/tests.rs @@ -18,7 +18,7 @@ use crate::{ mock::*, Error, Identity, IdentityContext, IdentityStatus, UserShieldingKeyType, Web3Network, }; use frame_support::{assert_err, assert_noop, assert_ok, traits::Get}; -use litentry_primitives::USER_SHIELDING_KEY_LEN; +use litentry_primitives::{all_evm_web3networks, USER_SHIELDING_KEY_LEN}; use sp_runtime::AccountId32; pub const ALICE: AccountId32 = AccountId32::new([1u8; 32]); @@ -36,7 +36,7 @@ fn set_user_shielding_key_works() { RuntimeOrigin::signed(ALICE), who.clone(), shielding_key, - vec![], + vec![Web3Network::Litentry], )); assert_eq!(IMT::user_shielding_keys(who.clone()), Some(shielding_key)); System::assert_last_event(RuntimeEvent::IMT(crate::Event::UserShieldingKeySet { @@ -121,6 +121,29 @@ fn link_identity_with_wrong_network_fails() { }); } +#[test] +fn link_identity_with_empty_network_works() { + new_test_ext(true).execute_with(|| { + let web3networks: Vec = vec![]; + let who: Identity = BOB.into(); + assert_ok!(IMT::link_identity( + RuntimeOrigin::signed(ALICE), + who.clone(), + alice_evm_identity(), + web3networks, + )); + assert_eq!( + IMT::id_graphs(who.clone(), alice_evm_identity()).unwrap(), + IdentityContext { + link_block: 1, + web3networks: all_evm_web3networks().try_into().unwrap(), + status: IdentityStatus::Active + } + ); + assert_eq!(crate::IDGraphLens::::get(&who), 2); + }); +} + #[test] fn cannot_link_identity_again() { new_test_ext(true).execute_with(|| { @@ -194,7 +217,7 @@ fn remove_identity_works() { RuntimeOrigin::signed(ALICE), who.clone(), shielding_key, - vec![], + vec![Web3Network::Litentry], )); assert_noop!( IMT::remove_identity( @@ -256,7 +279,7 @@ fn set_identity_networks_works() { RuntimeOrigin::signed(ALICE), who.clone(), shielding_key, - vec![], + vec![Web3Network::Litentry], )); assert_noop!( IMT::remove_identity( @@ -305,7 +328,7 @@ fn set_identity_networks_with_wrong_network_fails() { RuntimeOrigin::signed(ALICE), who.clone(), shielding_key, - vec![], + vec![Web3Network::Litentry], )); assert_noop!( IMT::remove_identity(