diff --git a/tee-worker/.env.dev b/tee-worker/.env.dev
index 6ffad948b4..65aa47f85d 100644
--- a/tee-worker/.env.dev
+++ b/tee-worker/.env.dev
@@ -11,4 +11,27 @@ TrustedWorkerPort=2000
UntrustedWorkerPort=2001
MuRaPort=3443
UntrustedHttpPort=4545
-NODE_ENV=local
\ No newline at end of file
+NODE_ENV=local
+# tee-worker dataproviders config
+TWITTER_OFFICIAL_URL=http://localhost:19527
+TWITTER_LITENTRY_URL=http://localhost:19527
+TWITTER_AUTH_TOKEN_V2=
+DISCORD_OFFICIAL_URL=http://localhost:19527
+DISCORD_LITENTRY_URL=http://localhost:19527
+DISCORD_AUTH_TOKEN=
+ACHAINABLE_URL=http://localhost:19527
+ACHAINABLE_AUTH_KEY=
+CREDENTIAL_ENDPOINT=http://localhost:9933
+ONEBLOCK_NOTION_KEY=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ONEBLOCK_NOTION_URL=https://abc.com
+SORA_QUIZ_MASTER_ID=SORA_QUIZ_MASTER_ID
+SORA_QUIZ_ATTENDEE_ID=SORA_QUIZ_ATTENDEE_ID
+NODEREAL_API_KEY=NODEREAL_API_KEY
+NODEREAL_API_URL=https://open-platform.nodereal.io/
+NODEREAL_API_CHAIN_NETWORK_URL=
+CONTEST_LEGEND_DISCORD_ROLE_ID=CONTEST_LEGEND_DISCORD_ROLE_ID
+CONTEST_POPULARITY_DISCORD_ROLE_ID=CONTEST_POPULARITY_DISCORD_ROLE_ID
+CONTEST_PARTICIPANT_DISCORD_ROLE_ID=CONTEST_PARTICIPANT_DISCORD_ROLE_ID
+VIP3_URL=https://dappapi.vip3.io/
+GENIIDATA_URL=https://api.geniidata.com/api/1/brc20/balance?
+GENIIDATA_API_KEY=142cf1b0-1ca7-11ee-bb5e-9d74c2e854ac
\ No newline at end of file
diff --git a/tee-worker/Cargo.lock b/tee-worker/Cargo.lock
index 604b0ee31b..01b2f96fd0 100644
--- a/tee-worker/Cargo.lock
+++ b/tee-worker/Cargo.lock
@@ -4577,7 +4577,6 @@ dependencies = [
"itp-types",
"itp-utils",
"lc-stf-task-sender",
- "lc-vc-task-sender",
"litentry-primitives",
"log 0.4.20",
"pallet-balances",
@@ -4995,7 +4994,6 @@ dependencies = [
"itp-settings",
"itp-storage",
"itp-types",
- "lc-data-providers",
"log 0.4.20",
"parity-scale-codec",
"serde_json 1.0.103",
@@ -6201,7 +6199,7 @@ dependencies = [
"itc-rest-client",
"itp-rpc",
"itp-stf-primitives",
- "lazy_static",
+ "itp-utils",
"lc-mock-server",
"litentry-primitives",
"log 0.4.20",
@@ -6340,7 +6338,6 @@ dependencies = [
"hex 0.4.0",
"ita-sgx-runtime",
"ita-stf",
- "itp-enclave-metrics",
"itp-extrinsics-factory",
"itp-node-api",
"itp-ocall-api",
@@ -6351,11 +6348,9 @@ dependencies = [
"itp-storage",
"itp-top-pool-author",
"itp-types",
- "lazy_static",
"lc-assertion-build",
"lc-credentials",
"lc-data-providers",
- "lc-identity-verification",
"lc-stf-task-receiver",
"lc-stf-task-sender",
"lc-vc-task-sender",
@@ -6365,11 +6360,8 @@ dependencies = [
"parity-scale-codec",
"sgx_tstd",
"sp-core",
- "thiserror 1.0.44",
- "thiserror 1.0.9",
"threadpool 1.8.0",
"threadpool 1.8.1",
- "url 2.1.1",
]
[[package]]
@@ -6378,7 +6370,6 @@ version = "0.1.0"
dependencies = [
"futures 0.3.28",
"futures 0.3.8",
- "itp-stf-primitives",
"itp-types",
"lazy_static",
"lc-stf-task-sender",
@@ -6388,10 +6379,6 @@ dependencies = [
"sgx_tstd",
"sp-runtime",
"sp-std 5.0.0",
- "thiserror 1.0.44",
- "thiserror 1.0.9",
- "url 2.1.1",
- "url 2.4.0",
]
[[package]]
@@ -7120,6 +7107,7 @@ dependencies = [
"futures 0.3.28",
"hex 0.4.3",
"ipfs-api",
+ "ita-stf",
"itc-parentchain",
"itc-parentchain-test",
"itc-rest-client",
diff --git a/tee-worker/app-libs/stf/Cargo.toml b/tee-worker/app-libs/stf/Cargo.toml
index 22a3c17e3a..9c6dd0aad8 100644
--- a/tee-worker/app-libs/stf/Cargo.toml
+++ b/tee-worker/app-libs/stf/Cargo.toml
@@ -41,7 +41,6 @@ sp-std = { default-features = false, git = "https://github.com/paritytech/substr
# litentry
itp-node-api-metadata-provider = { path = "../../core-primitives/node-api/metadata-provider", default-features = false }
lc-stf-task-sender = { path = "../../litentry/core/stf-task/sender", default-features = false }
-lc-vc-task-sender = { path = "../../litentry/core/vc-issuance/lc-vc-task-sender", default-features = false }
litentry-primitives = { path = "../../litentry/primitives", default-features = false }
pallet-parentchain = { path = "../../../pallets/parentchain", default-features = false }
@@ -60,7 +59,6 @@ sgx = [
# litentry
"litentry-primitives/sgx",
"lc-stf-task-sender/sgx",
- "lc-vc-task-sender/sgx",
"itp-node-api-metadata-provider/sgx",
]
std = [
@@ -89,7 +87,6 @@ std = [
# litentry
"litentry-primitives/std",
"lc-stf-task-sender/std",
- "lc-vc-task-sender/std",
"itp-node-api-metadata-provider/std",
]
test = []
diff --git a/tee-worker/core-primitives/enclave-api/Cargo.toml b/tee-worker/core-primitives/enclave-api/Cargo.toml
index 6908046ec9..c9dfaa9dff 100644
--- a/tee-worker/core-primitives/enclave-api/Cargo.toml
+++ b/tee-worker/core-primitives/enclave-api/Cargo.toml
@@ -26,7 +26,6 @@ itp-storage = { path = "../storage" }
itp-types = { path = "../types" }
# litentry
-lc-data-providers = { path = "../../litentry/core/data-providers" }
teerex-primitives = { path = "../../../primitives/teerex", default-features = false }
[features]
diff --git a/tee-worker/core-primitives/enclave-api/ffi/src/lib.rs b/tee-worker/core-primitives/enclave-api/ffi/src/lib.rs
index 48336e9268..2dbb8fb016 100644
--- a/tee-worker/core-primitives/enclave-api/ffi/src/lib.rs
+++ b/tee-worker/core-primitives/enclave-api/ffi/src/lib.rs
@@ -276,17 +276,4 @@ extern "C" {
until: *const u32,
) -> sgx_status_t;
- pub fn run_stf_task_handler(
- eid: sgx_enclave_id_t,
- retval: *mut sgx_status_t,
- data_provider_config: *const u8,
- data_provider_config_size: usize,
- ) -> sgx_status_t;
-
- pub fn run_vc_issuance(
- eid: sgx_enclave_id_t,
- retval: *mut sgx_status_t,
- data_provider_config: *const u8,
- data_provider_config_size: usize,
- ) -> sgx_status_t;
}
diff --git a/tee-worker/core-primitives/enclave-api/src/lib.rs b/tee-worker/core-primitives/enclave-api/src/lib.rs
index 767e311b46..38c810624f 100644
--- a/tee-worker/core-primitives/enclave-api/src/lib.rs
+++ b/tee-worker/core-primitives/enclave-api/src/lib.rs
@@ -22,11 +22,6 @@ pub mod sidechain;
pub mod teeracle_api;
pub mod utils;
-#[cfg(feature = "implement-ffi")]
-pub mod stf_task_handler;
-#[cfg(feature = "implement-ffi")]
-pub mod vc_issuance;
-
#[cfg(feature = "implement-ffi")]
pub use sgx_urts::SgxEnclave;
diff --git a/tee-worker/core-primitives/enclave-api/src/stf_task_handler.rs b/tee-worker/core-primitives/enclave-api/src/stf_task_handler.rs
deleted file mode 100644
index a039b6461f..0000000000
--- a/tee-worker/core-primitives/enclave-api/src/stf_task_handler.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2020-2023 Trust Computing GmbH.
-// This file is part of Litentry.
-//
-// Litentry is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Litentry is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Litentry. If not, see .
-
-use crate::{error::Error, Enclave, EnclaveResult};
-use codec::Encode;
-use frame_support::ensure;
-use itp_enclave_api_ffi as ffi;
-use lc_data_providers::DataProviderConfig;
-use sgx_types::*;
-
-/// Trait to run a stf task handling thread inside the enclave.
-pub trait StfTaskHandler {
- fn run_stf_task_handler(&self, data_provider_config: DataProviderConfig) -> EnclaveResult<()>;
-}
-
-impl StfTaskHandler for Enclave {
- fn run_stf_task_handler(&self, data_provider_config: DataProviderConfig) -> EnclaveResult<()> {
- let mut retval = sgx_status_t::SGX_SUCCESS;
-
- let data_provider_config_enc = data_provider_config.encode();
-
- let result = unsafe {
- ffi::run_stf_task_handler(
- self.eid,
- &mut retval,
- data_provider_config_enc.as_ptr(),
- data_provider_config_enc.len(),
- )
- };
-
- ensure!(result == sgx_status_t::SGX_SUCCESS, Error::Sgx(result));
- ensure!(retval == sgx_status_t::SGX_SUCCESS, Error::Sgx(retval));
-
- Ok(())
- }
-}
diff --git a/tee-worker/core-primitives/enclave-api/src/vc_issuance.rs b/tee-worker/core-primitives/enclave-api/src/vc_issuance.rs
deleted file mode 100644
index 7fc4598c9a..0000000000
--- a/tee-worker/core-primitives/enclave-api/src/vc_issuance.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2020-2023 Trust Computing GmbH.
-// This file is part of Litentry.
-//
-// Litentry is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Litentry is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Litentry. If not, see .
-
-use crate::{error::Error, Enclave, EnclaveResult};
-use codec::Encode;
-use frame_support::ensure;
-use itp_enclave_api_ffi as ffi;
-use lc_data_providers::DataProviderConfig;
-use sgx_types::*;
-
-/// Trait to run a stf task handling thread inside the enclave.
-pub trait VcIssuance {
- fn run_vc_issuance(&self, data_provider_config: DataProviderConfig) -> EnclaveResult<()>;
-}
-
-impl VcIssuance for Enclave {
- fn run_vc_issuance(&self, data_provider_config: DataProviderConfig) -> EnclaveResult<()> {
- let mut retval = sgx_status_t::SGX_SUCCESS;
-
- let data_provider_config_enc = data_provider_config.encode();
-
- let result = unsafe {
- ffi::run_vc_issuance(
- self.eid,
- &mut retval,
- data_provider_config_enc.as_ptr(),
- data_provider_config_enc.len(),
- )
- };
-
- ensure!(result == sgx_status_t::SGX_SUCCESS, Error::Sgx(result));
- ensure!(retval == sgx_status_t::SGX_SUCCESS, Error::Sgx(retval));
-
- Ok(())
- }
-}
diff --git a/tee-worker/core-primitives/test/src/mock/shielding_crypto_mock.rs b/tee-worker/core-primitives/test/src/mock/shielding_crypto_mock.rs
index 441c770833..0006ba1245 100644
--- a/tee-worker/core-primitives/test/src/mock/shielding_crypto_mock.rs
+++ b/tee-worker/core-primitives/test/src/mock/shielding_crypto_mock.rs
@@ -22,10 +22,6 @@ use sgx_crypto_helper::{rsa3072::Rsa3072KeyPair, RsaKeyPair};
use sp_core::ed25519::Pair as Ed25519Pair;
use std::vec::Vec;
-/// Crypto key mock
-///
-/// mock implementation that does not encrypt
-/// encrypt/decrypt return the input as is
#[derive(Clone)]
pub struct ShieldingCryptoMock {
key: Rsa3072KeyPair,
diff --git a/tee-worker/docker/docker-compose.yml b/tee-worker/docker/docker-compose.yml
index ae89562fcc..707588493d 100644
--- a/tee-worker/docker/docker-compose.yml
+++ b/tee-worker/docker/docker-compose.yml
@@ -144,7 +144,7 @@ services:
retries: 20
entrypoint:
"/usr/local/bin/litentry-worker --clean-reset --ws-external -M litentry-worker-1 -T wss://litentry-worker-1
- -u ws://litentry-node -U ws://litentry-worker-1 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server --running-mode mock
+ -u ws://litentry-node -U ws://litentry-worker-1 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server
run --dev --skip-ra"
restart: "no"
volumes:
diff --git a/tee-worker/docker/multiworker-docker-compose.yml b/tee-worker/docker/multiworker-docker-compose.yml
index fa594742a4..70225a3d47 100644
--- a/tee-worker/docker/multiworker-docker-compose.yml
+++ b/tee-worker/docker/multiworker-docker-compose.yml
@@ -98,6 +98,7 @@ services:
- --execution=wasm
environment:
RUST_LOG: sc_basic_authorship=trace,cumulus-consensus=trace,cumulus-collator=trace,collator_protocol=trace,collation_generation=trace,aura=debug
+
ulimits: *a1
litentry-worker-1:
image: litentry/litentry-worker:latest
@@ -144,7 +145,7 @@ services:
retries: 20
entrypoint:
"/usr/local/bin/litentry-worker --clean-reset --ws-external -M litentry-worker-1 -T wss://litentry-worker-1
- -u ws://litentry-node -U ws://litentry-worker-1 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server --running-mode mock
+ -u ws://litentry-node -U ws://litentry-worker-1 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server
run --dev --skip-ra"
restart: "no"
litentry-worker-2:
@@ -167,6 +168,24 @@ services:
- "${SGX_QCNL:-/dev/null}:/etc/sgx_default_qcnl.conf"
environment:
- RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug,
+ - TWITTER_OFFICIAL_URL=http://localhost:19527
+ - TWITTER_LITENTRY_URL=http://localhost:19527
+ - TWITTER_AUTH_TOKEN_V2=
+ - DISCORD_OFFICIAL_URL=http://localhost:19527
+ - DISCORD_LITENTRY_URL=http://localhost:19527
+ - DISCORD_AUTH_TOKEN=
+ - ACHAINABLE_URL=http://localhost:19527
+ - ACHAINABLE_AUTH_KEY=
+ - CREDENTIAL_ENDPOINT=http://localhost:9933
+ - ONEBLOCK_NOTION_KEY=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ - ONEBLOCK_NOTION_URL=https://abc.com
+ - SORA_QUIZ_MASTER_ID=SORA_QUIZ_MASTER_ID
+ - SORA_QUIZ_ATTENDEE_ID=SORA_QUIZ_ATTENDEE_ID
+ - NODEREAL_API_KEY=NODEREAL_API_KEY
+ - NODEREAL_API_URL=https://open-platform.nodereal.io/
+ - CONTEST_LEGEND_DISCORD_ROLE_ID=CONTEST_LEGEND_DISCORD_ROLE_ID
+ - CONTEST_POPULARITY_DISCORD_ROLE_ID=CONTEST_POPULARITY_DISCORD_ROLE_ID
+ - CONTEST_PARTICIPANT_DISCORD_ROLE_ID=CONTEST_PARTICIPANT_DISCORD_ROLE_ID
networks:
- litentry-test-network
healthcheck:
@@ -176,7 +195,7 @@ services:
retries: 20
entrypoint:
"/usr/local/bin/litentry-worker --clean-reset --ws-external -M litentry-worker-2 -T wss://litentry-worker-2
- -u ws://litentry-node -U ws://litentry-worker-2 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server --running-mode mock
+ -u ws://litentry-node -U ws://litentry-worker-2 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server
run --dev --skip-ra --request-state"
restart: "no"
litentry-worker-3:
@@ -199,6 +218,24 @@ services:
- "${SGX_QCNL:-/dev/null}:/etc/sgx_default_qcnl.conf"
environment:
- RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug,
+ - TWITTER_OFFICIAL_URL=http://localhost:19527
+ - TWITTER_LITENTRY_URL=http://localhost:19527
+ - TWITTER_AUTH_TOKEN_V2=
+ - DISCORD_OFFICIAL_URL=http://localhost:19527
+ - DISCORD_LITENTRY_URL=http://localhost:19527
+ - DISCORD_AUTH_TOKEN=
+ - ACHAINABLE_URL=http://localhost:19527
+ - ACHAINABLE_AUTH_KEY=
+ - CREDENTIAL_ENDPOINT=http://localhost:9933
+ - ONEBLOCK_NOTION_KEY=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ - ONEBLOCK_NOTION_URL=https://abc.com
+ - SORA_QUIZ_MASTER_ID=SORA_QUIZ_MASTER_ID
+ - SORA_QUIZ_ATTENDEE_ID=SORA_QUIZ_ATTENDEE_ID
+ - NODEREAL_API_KEY=NODEREAL_API_KEY
+ - NODEREAL_API_URL=https://open-platform.nodereal.io/
+ - CONTEST_LEGEND_DISCORD_ROLE_ID=CONTEST_LEGEND_DISCORD_ROLE_ID
+ - CONTEST_POPULARITY_DISCORD_ROLE_ID=CONTEST_POPULARITY_DISCORD_ROLE_ID
+ - CONTEST_PARTICIPANT_DISCORD_ROLE_ID=CONTEST_PARTICIPANT_DISCORD_ROLE_ID
networks:
- litentry-test-network
healthcheck:
@@ -208,7 +245,7 @@ services:
retries: 20
entrypoint:
"/usr/local/bin/litentry-worker --clean-reset --ws-external -M litentry-worker-3 -T wss://litentry-worker-3
- -u ws://litentry-node -U ws://litentry-worker-3 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server --running-mode mock
+ -u ws://litentry-node -U ws://litentry-worker-3 -P 2011 -w 2101 -p 9912 -h 4645 --enable-mock-server
run --dev --skip-ra --request-state"
restart: "no"
volumes:
diff --git a/tee-worker/enclave-runtime/Cargo.lock b/tee-worker/enclave-runtime/Cargo.lock
index 277b721f63..0fabae9a7d 100644
--- a/tee-worker/enclave-runtime/Cargo.lock
+++ b/tee-worker/enclave-runtime/Cargo.lock
@@ -1922,7 +1922,6 @@ dependencies = [
"itp-types",
"itp-utils",
"lc-stf-task-sender",
- "lc-vc-task-sender",
"litentry-primitives",
"log",
"pallet-balances",
@@ -2954,7 +2953,7 @@ dependencies = [
"http_req",
"itc-rest-client",
"itp-rpc",
- "lazy_static",
+ "itp-utils",
"litentry-primitives",
"log",
"parity-scale-codec",
@@ -3059,7 +3058,6 @@ dependencies = [
"hex 0.4.0",
"ita-sgx-runtime",
"ita-stf",
- "itp-enclave-metrics",
"itp-extrinsics-factory",
"itp-node-api",
"itp-ocall-api",
@@ -3070,11 +3068,9 @@ dependencies = [
"itp-storage",
"itp-top-pool-author",
"itp-types",
- "lazy_static",
"lc-assertion-build",
"lc-credentials",
"lc-data-providers",
- "lc-identity-verification",
"lc-stf-task-receiver",
"lc-stf-task-sender",
"lc-vc-task-sender",
@@ -3084,9 +3080,7 @@ dependencies = [
"parity-scale-codec",
"sgx_tstd",
"sp-core",
- "thiserror",
"threadpool",
- "url",
]
[[package]]
@@ -3094,7 +3088,6 @@ name = "lc-vc-task-sender"
version = "0.1.0"
dependencies = [
"futures 0.3.8",
- "itp-stf-primitives",
"itp-types",
"lazy_static",
"lc-stf-task-sender",
@@ -3104,8 +3097,6 @@ dependencies = [
"sgx_tstd",
"sp-runtime",
"sp-std",
- "thiserror",
- "url",
]
[[package]]
diff --git a/tee-worker/enclave-runtime/Enclave.edl b/tee-worker/enclave-runtime/Enclave.edl
index 53dfca0220..04c02fea61 100644
--- a/tee-worker/enclave-runtime/Enclave.edl
+++ b/tee-worker/enclave-runtime/Enclave.edl
@@ -192,14 +192,6 @@ enclave {
public sgx_status_t ignore_parentchain_block_import_validation_until(
[in] uint32_t* until
);
-
- public size_t run_stf_task_handler(
- [in, size=data_providers_static_len] uint8_t* data_providers_static, uint32_t data_providers_static_len
- );
-
- public size_t run_vc_issuance(
- [in, size=data_providers_static_len] uint8_t* data_providers_static, uint32_t data_providers_static_len
- );
};
untrusted {
diff --git a/tee-worker/enclave-runtime/src/initialization/global_components.rs b/tee-worker/enclave-runtime/src/initialization/global_components.rs
index 8f45ddcc7f..8460670bc5 100644
--- a/tee-worker/enclave-runtime/src/initialization/global_components.rs
+++ b/tee-worker/enclave-runtime/src/initialization/global_components.rs
@@ -91,6 +91,7 @@ use its_sidechain::{
slots::FailSlotOnDemand,
};
use lazy_static::lazy_static;
+use lc_data_providers::DataProviderConfig;
use litentry_primitives::BroadcastedRequest;
use sgx_crypto_helper::rsa3072::Rsa3072KeyPair;
use sgx_tstd::vec::Vec;
@@ -499,3 +500,6 @@ pub static GLOBAL_SIDECHAIN_BLOCK_SYNCER_COMPONENT: ComponentContainer<
pub static GLOBAL_SIDECHAIN_FAIL_SLOT_ON_DEMAND_COMPONENT: ComponentContainer<
Option,
> = ComponentContainer::new("sidechain_fail_slot_on_demand");
+
+pub static GLOBAL_DATA_PROVIDER_CONFIG: ComponentContainer =
+ ComponentContainer::new("data_provider_config");
diff --git a/tee-worker/enclave-runtime/src/initialization/mod.rs b/tee-worker/enclave-runtime/src/initialization/mod.rs
index 7faee9d686..55845d2eac 100644
--- a/tee-worker/enclave-runtime/src/initialization/mod.rs
+++ b/tee-worker/enclave-runtime/src/initialization/mod.rs
@@ -27,14 +27,15 @@ use crate::{
EnclaveStateHandler, EnclaveStateInitializer, EnclaveStateObserver,
EnclaveStateSnapshotRepository, EnclaveStfEnclaveSigner, EnclaveTopPool,
EnclaveTopPoolAuthor, DIRECT_RPC_REQUEST_SINK_COMPONENT,
- GLOBAL_ATTESTATION_HANDLER_COMPONENT, GLOBAL_DIRECT_RPC_BROADCASTER_COMPONENT,
- GLOBAL_INTEGRITEE_PARENTCHAIN_LIGHT_CLIENT_SEAL, GLOBAL_OCALL_API_COMPONENT,
- GLOBAL_RPC_WS_HANDLER_COMPONENT, GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT,
- GLOBAL_SIDECHAIN_BLOCK_COMPOSER_COMPONENT, GLOBAL_SIDECHAIN_BLOCK_SYNCER_COMPONENT,
- GLOBAL_SIDECHAIN_FAIL_SLOT_ON_DEMAND_COMPONENT, GLOBAL_SIDECHAIN_IMPORT_QUEUE_COMPONENT,
- GLOBAL_SIDECHAIN_IMPORT_QUEUE_WORKER_COMPONENT, GLOBAL_SIGNING_KEY_REPOSITORY_COMPONENT,
- GLOBAL_STATE_HANDLER_COMPONENT, GLOBAL_STATE_KEY_REPOSITORY_COMPONENT,
- GLOBAL_STATE_OBSERVER_COMPONENT, GLOBAL_TARGET_A_PARENTCHAIN_LIGHT_CLIENT_SEAL,
+ GLOBAL_ATTESTATION_HANDLER_COMPONENT, GLOBAL_DATA_PROVIDER_CONFIG,
+ GLOBAL_DIRECT_RPC_BROADCASTER_COMPONENT, GLOBAL_INTEGRITEE_PARENTCHAIN_LIGHT_CLIENT_SEAL,
+ GLOBAL_OCALL_API_COMPONENT, GLOBAL_RPC_WS_HANDLER_COMPONENT,
+ GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT, GLOBAL_SIDECHAIN_BLOCK_COMPOSER_COMPONENT,
+ GLOBAL_SIDECHAIN_BLOCK_SYNCER_COMPONENT, GLOBAL_SIDECHAIN_FAIL_SLOT_ON_DEMAND_COMPONENT,
+ GLOBAL_SIDECHAIN_IMPORT_QUEUE_COMPONENT, GLOBAL_SIDECHAIN_IMPORT_QUEUE_WORKER_COMPONENT,
+ GLOBAL_SIGNING_KEY_REPOSITORY_COMPONENT, GLOBAL_STATE_HANDLER_COMPONENT,
+ GLOBAL_STATE_KEY_REPOSITORY_COMPONENT, GLOBAL_STATE_OBSERVER_COMPONENT,
+ GLOBAL_TARGET_A_PARENTCHAIN_LIGHT_CLIENT_SEAL,
GLOBAL_TARGET_B_PARENTCHAIN_LIGHT_CLIENT_SEAL, GLOBAL_TOP_POOL_AUTHOR_COMPONENT,
GLOBAL_WEB_SOCKET_SERVER_COMPONENT,
},
@@ -83,7 +84,10 @@ use its_sidechain::{
block_composer::BlockComposer,
slots::{FailSlotMode, FailSlotOnDemand},
};
+use lc_data_providers::DataProviderConfig;
use lc_scheduled_enclave::{ScheduledEnclaveUpdater, GLOBAL_SCHEDULED_ENCLAVE};
+use lc_stf_task_receiver::{run_stf_task_receiver, StfTaskContext};
+use lc_vc_task_receiver::run_vc_handler_runner;
use litentry_primitives::BroadcastedRequest;
use log::*;
use sgx_types::sgx_status_t;
@@ -212,6 +216,19 @@ pub(crate) fn init_enclave(
Arc::new(IntelAttestationHandler::new(ocall_api, signing_key_repository));
GLOBAL_ATTESTATION_HANDLER_COMPONENT.initialize(attestation_handler);
+ let data_provider_config = DataProviderConfig::new();
+ GLOBAL_DATA_PROVIDER_CONFIG.initialize(data_provider_config.into());
+
+ std::thread::spawn(move || {
+ #[allow(clippy::unwrap_used)]
+ run_stf_task_handler().unwrap();
+ });
+
+ std::thread::spawn(move || {
+ #[allow(clippy::unwrap_used)]
+ run_vc_issuance().unwrap();
+ });
+
Ok(())
}
@@ -230,6 +247,64 @@ fn initialize_state_observer(
Ok(Arc::new(EnclaveStateObserver::from_map(states_map)))
}
+fn run_stf_task_handler() -> Result<(), Error> {
+ let author_api = GLOBAL_TOP_POOL_AUTHOR_COMPONENT.get()?;
+ let state_handler = GLOBAL_STATE_HANDLER_COMPONENT.get()?;
+ let state_observer = GLOBAL_STATE_OBSERVER_COMPONENT.get()?;
+ let data_provider_config = GLOBAL_DATA_PROVIDER_CONFIG.get()?;
+
+ let shielding_key_repository = GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT.get()?;
+
+ let ocall_api = GLOBAL_OCALL_API_COMPONENT.get()?;
+ let stf_enclave_signer = Arc::new(EnclaveStfEnclaveSigner::new(
+ state_observer,
+ ocall_api.clone(),
+ shielding_key_repository.clone(),
+ author_api.clone(),
+ ));
+
+ let stf_task_context = StfTaskContext::new(
+ shielding_key_repository,
+ author_api,
+ stf_enclave_signer,
+ state_handler,
+ ocall_api,
+ data_provider_config,
+ );
+
+ run_stf_task_receiver(Arc::new(stf_task_context)).map_err(Error::StfTaskReceiver)
+}
+
+fn run_vc_issuance() -> Result<(), Error> {
+ let author_api = GLOBAL_TOP_POOL_AUTHOR_COMPONENT.get()?;
+ let state_handler = GLOBAL_STATE_HANDLER_COMPONENT.get()?;
+ let state_observer = GLOBAL_STATE_OBSERVER_COMPONENT.get()?;
+ let data_provider_config = GLOBAL_DATA_PROVIDER_CONFIG.get()?;
+
+ let shielding_key_repository = GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT.get()?;
+ #[allow(clippy::unwrap_used)]
+ let ocall_api = GLOBAL_OCALL_API_COMPONENT.get()?;
+ let stf_enclave_signer = Arc::new(EnclaveStfEnclaveSigner::new(
+ state_observer,
+ ocall_api.clone(),
+ shielding_key_repository.clone(),
+ author_api.clone(),
+ ));
+
+ let stf_task_context = StfTaskContext::new(
+ shielding_key_repository,
+ author_api,
+ stf_enclave_signer,
+ state_handler,
+ ocall_api,
+ data_provider_config,
+ );
+ let extrinsic_factory = get_extrinsic_factory_from_integritee_solo_or_parachain()?;
+ let node_metadata_repo = get_node_metadata_repository_from_integritee_solo_or_parachain()?;
+ run_vc_handler_runner(Arc::new(stf_task_context), extrinsic_factory, node_metadata_repo);
+ Ok(())
+}
+
pub(crate) fn init_enclave_sidechain_components(
fail_mode: Option,
fail_at: u64,
diff --git a/tee-worker/enclave-runtime/src/lib.rs b/tee-worker/enclave-runtime/src/lib.rs
index b0f3d8b98b..9c3b078558 100644
--- a/tee-worker/enclave-runtime/src/lib.rs
+++ b/tee-worker/enclave-runtime/src/lib.rs
@@ -94,7 +94,6 @@ mod ocall;
mod shard_vault;
mod stf_task_handler;
mod utils;
-mod vc_issuance_task;
pub mod error;
pub mod rpc;
diff --git a/tee-worker/enclave-runtime/src/stf_task_handler.rs b/tee-worker/enclave-runtime/src/stf_task_handler.rs
index 11876a4418..8b13789179 100644
--- a/tee-worker/enclave-runtime/src/stf_task_handler.rs
+++ b/tee-worker/enclave-runtime/src/stf_task_handler.rs
@@ -1,122 +1 @@
-// Copyright 2020-2023 Trust Computing GmbH.
-// This file is part of Litentry.
-//
-// Litentry is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Litentry is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Litentry. If not, see .
-use crate::utils::DecodeRaw;
-use itp_component_container::ComponentGetter;
-use itp_sgx_crypto::key_repository::AccessKey;
-use lc_data_providers::{DataProviderConfig, GLOBAL_DATA_PROVIDER_CONFIG};
-use lc_stf_task_receiver::{run_stf_task_receiver, StfTaskContext};
-use log::*;
-use sgx_types::sgx_status_t;
-use std::sync::Arc;
-
-use crate::{
- error::{Error, Result},
- initialization::global_components::{
- EnclaveStfEnclaveSigner, GLOBAL_OCALL_API_COMPONENT,
- GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT, GLOBAL_STATE_OBSERVER_COMPONENT,
- GLOBAL_TOP_POOL_AUTHOR_COMPONENT,
- },
- GLOBAL_STATE_HANDLER_COMPONENT,
-};
-
-#[no_mangle]
-pub unsafe extern "C" fn run_stf_task_handler(dpc: *const u8, dpc_size: usize) -> sgx_status_t {
- let data_provider_config = match DataProviderConfig::decode_raw(dpc, dpc_size) {
- Ok(data_provider_config) => data_provider_config,
- Err(e) => return Error::Codec(e).into(),
- };
-
- match GLOBAL_DATA_PROVIDER_CONFIG.write() {
- Ok(mut dpc) => {
- dpc.set_twitter_official_url(data_provider_config.twitter_official_url);
- dpc.set_twitter_litentry_url(data_provider_config.twitter_litentry_url);
- dpc.set_twitter_auth_token_v2(data_provider_config.twitter_auth_token_v2);
- dpc.set_discord_official_url(data_provider_config.discord_official_url);
- dpc.set_discord_litentry_url(data_provider_config.discord_litentry_url);
- dpc.set_discord_auth_token(data_provider_config.discord_auth_token);
- dpc.set_achainable_url(data_provider_config.achainable_url);
- dpc.set_achainable_auth_key(data_provider_config.achainable_auth_key);
- dpc.set_credential_endpoint(data_provider_config.credential_endpoint);
- dpc.set_oneblock_notion_key(data_provider_config.oneblock_notion_key);
- dpc.set_oneblock_notion_url(data_provider_config.oneblock_notion_url);
- dpc.set_sora_quiz_master_id(data_provider_config.sora_quiz_master_id);
- dpc.set_sora_quiz_attendee_id(data_provider_config.sora_quiz_attendee_id);
- dpc.set_nodereal_api_key(data_provider_config.nodereal_api_key);
- dpc.set_nodereal_api_retry_delay(data_provider_config.nodereal_api_retry_delay);
- dpc.set_nodereal_api_retry_times(data_provider_config.nodereal_api_retry_times);
- dpc.set_nodereal_api_url(data_provider_config.nodereal_api_url);
- dpc.set_nodereal_api_chain_network_url(
- data_provider_config.nodereal_api_chain_network_url,
- );
- dpc.set_contest_legend_discord_role_id(
- data_provider_config.contest_legend_discord_role_id,
- );
- dpc.set_contest_popularity_discord_role_id(
- data_provider_config.contest_popularity_discord_role_id,
- );
- dpc.set_contest_participant_discord_role_id(
- data_provider_config.contest_participant_discord_role_id,
- );
- dpc.set_vip3_url(data_provider_config.vip3_url);
- dpc.set_geniidata_url(data_provider_config.geniidata_url);
- dpc.set_geniidata_api_key(data_provider_config.geniidata_api_key);
- },
- Err(e) => {
- error!("Error while setting data provider config: {:?}", e);
- return Error::MutexAccess.into()
- },
- }
-
- if let Err(e) = run_stf_task_handler_internal() {
- error!("Error while running stf task handler thread: {:?}", e);
- return e.into()
- }
-
- sgx_status_t::SGX_SUCCESS
-}
-
-/// Internal [`run_stf_task_handler`] function to be able to use the `?` operator.
-///
-/// Runs an extrinsic request inside the enclave, opening a channel and waiting for
-/// senders to send requests.
-fn run_stf_task_handler_internal() -> Result<()> {
- let author_api = GLOBAL_TOP_POOL_AUTHOR_COMPONENT.get()?;
- let state_handler = GLOBAL_STATE_HANDLER_COMPONENT.get()?;
- let state_observer = GLOBAL_STATE_OBSERVER_COMPONENT.get()?;
-
- let shielding_key_repository = GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT.get()?;
- #[allow(clippy::unwrap_used)]
- let shielding_key = shielding_key_repository.retrieve_key().unwrap();
-
- let ocall_api = GLOBAL_OCALL_API_COMPONENT.get()?;
- let stf_enclave_signer = Arc::new(EnclaveStfEnclaveSigner::new(
- state_observer,
- ocall_api.clone(),
- shielding_key_repository,
- author_api.clone(),
- ));
-
- let stf_task_context = StfTaskContext::new(
- shielding_key,
- author_api,
- stf_enclave_signer,
- state_handler,
- ocall_api,
- );
-
- run_stf_task_receiver(Arc::new(stf_task_context)).map_err(Error::StfTaskReceiver)
-}
diff --git a/tee-worker/enclave-runtime/src/vc_issuance_task.rs b/tee-worker/enclave-runtime/src/vc_issuance_task.rs
index bdbce0ecc7..e69de29bb2 100644
--- a/tee-worker/enclave-runtime/src/vc_issuance_task.rs
+++ b/tee-worker/enclave-runtime/src/vc_issuance_task.rs
@@ -1,130 +0,0 @@
-// Copyright 2020-2023 Trust Computing GmbH.
-// This file is part of Litentry.
-//
-// Litentry is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Litentry is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Litentry. If not, see .
-
-use crate::utils::DecodeRaw;
-use itp_component_container::ComponentGetter;
-use itp_sgx_crypto::key_repository::AccessKey;
-use lc_data_providers::{DataProviderConfig, GLOBAL_DATA_PROVIDER_CONFIG};
-use lc_stf_task_receiver::StfTaskContext;
-use lc_vc_task_receiver::run_vc_handler_runner;
-use log::*;
-use sgx_types::sgx_status_t;
-use std::sync::Arc;
-
-use crate::{
- error::{Error, Result},
- initialization::global_components::{
- EnclaveStfEnclaveSigner, GLOBAL_OCALL_API_COMPONENT,
- GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT, GLOBAL_STATE_OBSERVER_COMPONENT,
- GLOBAL_TOP_POOL_AUTHOR_COMPONENT,
- },
- utils::{
- get_extrinsic_factory_from_integritee_solo_or_parachain,
- get_node_metadata_repository_from_integritee_solo_or_parachain,
- },
- GLOBAL_STATE_HANDLER_COMPONENT,
-};
-
-#[no_mangle]
-pub unsafe extern "C" fn run_vc_issuance(dpc: *const u8, dpc_size: usize) -> sgx_status_t {
- let data_provider_config = match DataProviderConfig::decode_raw(dpc, dpc_size) {
- Ok(data_provider_config) => data_provider_config,
- Err(e) => return Error::Codec(e).into(),
- };
-
- match GLOBAL_DATA_PROVIDER_CONFIG.write() {
- Ok(mut dpc) => {
- dpc.set_twitter_official_url(data_provider_config.twitter_official_url);
- dpc.set_twitter_litentry_url(data_provider_config.twitter_litentry_url);
- dpc.set_twitter_auth_token_v2(data_provider_config.twitter_auth_token_v2);
- dpc.set_discord_official_url(data_provider_config.discord_official_url);
- dpc.set_discord_litentry_url(data_provider_config.discord_litentry_url);
- dpc.set_discord_auth_token(data_provider_config.discord_auth_token);
- dpc.set_achainable_url(data_provider_config.achainable_url);
- dpc.set_achainable_auth_key(data_provider_config.achainable_auth_key);
- dpc.set_credential_endpoint(data_provider_config.credential_endpoint);
- dpc.set_oneblock_notion_key(data_provider_config.oneblock_notion_key);
- dpc.set_oneblock_notion_url(data_provider_config.oneblock_notion_url);
- dpc.set_sora_quiz_master_id(data_provider_config.sora_quiz_master_id);
- dpc.set_sora_quiz_attendee_id(data_provider_config.sora_quiz_attendee_id);
- dpc.set_nodereal_api_key(data_provider_config.nodereal_api_key);
- dpc.set_nodereal_api_retry_delay(data_provider_config.nodereal_api_retry_delay);
- dpc.set_nodereal_api_retry_times(data_provider_config.nodereal_api_retry_times);
- dpc.set_nodereal_api_url(data_provider_config.nodereal_api_url);
- dpc.set_nodereal_api_chain_network_url(
- data_provider_config.nodereal_api_chain_network_url,
- );
- dpc.set_contest_legend_discord_role_id(
- data_provider_config.contest_legend_discord_role_id,
- );
- dpc.set_contest_popularity_discord_role_id(
- data_provider_config.contest_popularity_discord_role_id,
- );
- dpc.set_contest_participant_discord_role_id(
- data_provider_config.contest_participant_discord_role_id,
- );
- dpc.set_vip3_url(data_provider_config.vip3_url);
- dpc.set_geniidata_url(data_provider_config.geniidata_url);
- dpc.set_geniidata_api_key(data_provider_config.geniidata_api_key);
- },
- Err(e) => {
- error!("Error while setting data provider config: {:?}", e);
- return Error::MutexAccess.into()
- },
- }
-
- println!("[+] Starting to Run VC Issuance Internal");
- if let Err(e) = run_vc_issuance_internal() {
- error!("Error while running stf task handler thread: {:?}", e);
- return e.into()
- }
-
- sgx_status_t::SGX_SUCCESS
-}
-
-/// Internal [`run_stf_task_handler`] function to be able to use the `?` operator.
-///
-/// Runs an extrinsic request inside the enclave, opening a channel and waiting for
-/// senders to send requests.
-fn run_vc_issuance_internal() -> Result<()> {
- let author_api = GLOBAL_TOP_POOL_AUTHOR_COMPONENT.get()?;
- let state_handler = GLOBAL_STATE_HANDLER_COMPONENT.get()?;
- let state_observer = GLOBAL_STATE_OBSERVER_COMPONENT.get()?;
-
- let shielding_key_repository = GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT.get()?;
- #[allow(clippy::unwrap_used)]
- let shielding_key = shielding_key_repository.retrieve_key().unwrap();
-
- let ocall_api = GLOBAL_OCALL_API_COMPONENT.get()?;
- let stf_enclave_signer = Arc::new(EnclaveStfEnclaveSigner::new(
- state_observer,
- ocall_api.clone(),
- shielding_key_repository,
- author_api.clone(),
- ));
-
- let stf_task_context = StfTaskContext::new(
- shielding_key,
- author_api,
- stf_enclave_signer,
- state_handler,
- ocall_api,
- );
- let extrinsic_factory = get_extrinsic_factory_from_integritee_solo_or_parachain()?;
- let node_metadata_repo = get_node_metadata_repository_from_integritee_solo_or_parachain()?;
- run_vc_handler_runner(Arc::new(stf_task_context), extrinsic_factory, node_metadata_repo);
- Ok(())
-}
diff --git a/tee-worker/litentry/core/assertion-build/src/a14.rs b/tee-worker/litentry/core/assertion-build/src/a14.rs
index 1c05d3d0df..72ebef5c58 100644
--- a/tee-worker/litentry/core/assertion-build/src/a14.rs
+++ b/tee-worker/litentry/core/assertion-build/src/a14.rs
@@ -32,9 +32,7 @@ use itc_rest_client::{
rest_client::RestClient,
RestPath, RestPost,
};
-use lc_data_providers::{
- build_client, DataProviderConfig, DataProviderConfigReader, ReadDataProviderConfig,
-};
+use lc_data_providers::{build_client, DataProviderConfig};
use serde::{Deserialize, Serialize};
const VC_A14_SUBJECT_DESCRIPTION: &str =
@@ -99,7 +97,10 @@ impl A14Client {
}
}
-pub fn build(req: &AssertionBuildRequest) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion A14 build, who: {:?}", account_id_to_string(&req.who));
// achainable expects polkadot addresses (those start with 1...)
@@ -111,12 +112,8 @@ pub fn build(req: &AssertionBuildRequest) -> Result {
polkadot_addresses.push(address);
}
}
-
- let data_provider_config =
- DataProviderConfigReader::read().map_err(|e| Error::RequestVCFailed(Assertion::A14, e))?;
-
let mut value = false;
- let mut client = A14Client::new(&data_provider_config);
+ let mut client = A14Client::new(data_provider_config);
for address in polkadot_addresses {
let data = A14Data {
diff --git a/tee-worker/litentry/core/assertion-build/src/a2.rs b/tee-worker/litentry/core/assertion-build/src/a2.rs
index 60f9420934..d6063b45f6 100644
--- a/tee-worker/litentry/core/assertion-build/src/a2.rs
+++ b/tee-worker/litentry/core/assertion-build/src/a2.rs
@@ -21,14 +21,20 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::*;
-use lc_data_providers::{discord_litentry::DiscordLitentryClient, vec_to_string};
+use lc_data_providers::{
+ discord_litentry::DiscordLitentryClient, vec_to_string, DataProviderConfig,
+};
const VC_A2_SUBJECT_DESCRIPTION: &str = "The user is a member of Litentry Discord.
Server link: https://discord.gg/phBSa3eMX9
Guild ID: 807161594245152800.";
const VC_A2_SUBJECT_TYPE: &str = "Litentry Discord Member";
-pub fn build(req: &AssertionBuildRequest, guild_id: ParameterString) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ guild_id: ParameterString,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion A2 build, who: {:?}", account_id_to_string(&req.who));
let mut discord_cnt: i32 = 0;
@@ -38,7 +44,7 @@ pub fn build(req: &AssertionBuildRequest, guild_id: ParameterString) -> Result = format!("{}", guild_id_u).as_bytes().to_vec();
@@ -113,7 +117,7 @@ mod tests {
req_ext_hash: Default::default(),
};
- let _ = build(&req, guild_id);
+ let _ = build(&req, guild_id, &data_provider_config);
log::info!("build A2 done");
}
}
diff --git a/tee-worker/litentry/core/assertion-build/src/a3.rs b/tee-worker/litentry/core/assertion-build/src/a3.rs
index b0209afdab..4790256730 100644
--- a/tee-worker/litentry/core/assertion-build/src/a3.rs
+++ b/tee-worker/litentry/core/assertion-build/src/a3.rs
@@ -21,7 +21,9 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::*;
-use lc_data_providers::{discord_litentry::DiscordLitentryClient, vec_to_string};
+use lc_data_providers::{
+ discord_litentry::DiscordLitentryClient, vec_to_string, DataProviderConfig,
+};
const VC_A3_SUBJECT_DESCRIPTION: &str =
"You have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882";
@@ -32,6 +34,7 @@ pub fn build(
guild_id: ParameterString,
channel_id: ParameterString,
role_id: ParameterString,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!("Assertion A3 build, who: {:?}", account_id_to_string(&req.who),);
@@ -56,7 +59,7 @@ pub fn build(
)
})?;
- let mut client = DiscordLitentryClient::new();
+ let mut client = DiscordLitentryClient::new(&data_provider_config.discord_litentry_url);
for identity in &req.identities {
if let Identity::Discord(address) = &identity.0 {
let resp = client
@@ -106,17 +109,15 @@ mod tests {
use crate::{a3::build, AccountId, AssertionBuildRequest};
use frame_support::BoundedVec;
use itp_stf_primitives::types::ShardIdentifier;
- use lc_data_providers::GLOBAL_DATA_PROVIDER_CONFIG;
+ use lc_data_providers::DataProviderConfig;
use litentry_primitives::{Assertion, Identity, IdentityNetworkTuple, IdentityString};
use log;
use std::{format, vec, vec::Vec};
#[test]
fn build_a3_works() {
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_discord_litentry_url("http://localhost:19527".to_string());
+ let mut data_provider_config = DataProviderConfig::new();
+ data_provider_config.set_discord_litentry_url("http://localhost:19527".to_string());
let guild_id_u: u64 = 919848390156767232;
let channel_id_u: u64 = 919848392035794945;
let role_id_u: u64 = 1034083718425493544;
@@ -146,7 +147,7 @@ mod tests {
req_ext_hash: Default::default(),
};
- let _ = build(&req, guild_id, channel_id, role_id);
+ let _ = build(&req, guild_id, channel_id, role_id, &data_provider_config);
log::info!("build A3 done");
}
}
diff --git a/tee-worker/litentry/core/assertion-build/src/a6.rs b/tee-worker/litentry/core/assertion-build/src/a6.rs
index cbb4f4bd27..0b1d82a8b4 100644
--- a/tee-worker/litentry/core/assertion-build/src/a6.rs
+++ b/tee-worker/litentry/core/assertion-build/src/a6.rs
@@ -21,7 +21,7 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::*;
-use lc_data_providers::twitter_official::TwitterOfficialClient;
+use lc_data_providers::{twitter_official::TwitterOfficialClient, DataProviderConfig};
const VC_A6_SUBJECT_DESCRIPTION: &str = "The range of the user's Twitter follower count";
const VC_A6_SUBJECT_TYPE: &str = "Twitter Follower Amount";
@@ -33,10 +33,16 @@ const VC_A6_SUBJECT_TYPE: &str = "Twitter Follower Amount";
/// * 1,000+ followers
/// * 10,000+ followers
/// * 100,000+ followers
-pub fn build(req: &AssertionBuildRequest) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion A6 build, who: {:?}", account_id_to_string(&req.who),);
- let mut client = TwitterOfficialClient::v2();
+ let mut client = TwitterOfficialClient::v2(
+ &data_provider_config.twitter_official_url,
+ &data_provider_config.twitter_auth_token_v2,
+ );
let mut sum: u32 = 0;
for identity in &req.identities {
diff --git a/tee-worker/litentry/core/assertion-build/src/a8.rs b/tee-worker/litentry/core/assertion-build/src/a8.rs
index 9633f1c3a1..a5ab09169e 100644
--- a/tee-worker/litentry/core/assertion-build/src/a8.rs
+++ b/tee-worker/litentry/core/assertion-build/src/a8.rs
@@ -23,22 +23,23 @@ extern crate sgx_tstd as std;
use crate::*;
use lc_data_providers::{
achainable::{AchainableAccountTotalTransactions, AchainableClient},
- DataProviderConfigReader, ReadDataProviderConfig,
+ DataProviderConfig,
};
use litentry_primitives::BoundedWeb3Network;
const VC_A8_SUBJECT_DESCRIPTION: &str = "Gets the range of number of transactions a user has made for a specific token on all supported networks (invalid transactions are also counted)";
const VC_A8_SUBJECT_TYPE: &str = "EVM/Substrate Transaction Count";
-pub fn build(req: &AssertionBuildRequest) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion A8 build, who: {:?}", account_id_to_string(&req.who),);
// It should never fail because `req.assertion.get_supported_web3networks()`
// returns the vector which is converted from a BoundedVec
let bounded_web3networks: BoundedWeb3Network =
req.assertion.get_supported_web3networks().try_into().unwrap();
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| Error::RequestVCFailed(Assertion::A8(bounded_web3networks.clone()), e))?;
- let mut client = AchainableClient::new(&data_provider_config);
+ let mut client = AchainableClient::new(data_provider_config);
let mut total_txs: u64 = 0;
let identities: Vec<(Web3Network, Vec)> = transpose_identity(&req.identities);
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/amount.rs b/tee-worker/litentry/core/assertion-build/src/achainable/amount.rs
index a3dd24bf74..0cf9777f7d 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/amount.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/amount.rs
@@ -25,7 +25,9 @@ use crate::{
*,
};
use lc_credentials::litentry_profile::holding_amount::LitentryProfileHoldingAmount;
-use lc_data_providers::{achainable_names::AchainableNameAmount, ConvertParameterString};
+use lc_data_providers::{
+ achainable_names::AchainableNameAmount, ConvertParameterString, DataProviderConfig,
+};
const CREATED_OVER_AMOUNT_CONTRACTS: &str = "Created over {amount} contracts";
const BALANCE_OVER_AMOUNT: &str = "Balance over {amount}";
@@ -98,7 +100,11 @@ const BALANCE_OVER_AMOUNT: &str = "Balance over {amount}";
/// ]
/// }
///
-pub fn build_amount(req: &AssertionBuildRequest, param: AchainableAmount) -> Result {
+pub fn build_amount(
+ req: &AssertionBuildRequest,
+ param: AchainableAmount,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion Achainable build_amount, who: {:?}", account_id_to_string(&req.who));
let identities = transpose_identity(&req.identities);
let addresses = identities
@@ -116,16 +122,17 @@ pub fn build_amount(req: &AssertionBuildRequest, param: AchainableAmount) -> Res
let mut balance = 0.0;
let mut flag = false;
if bname == AchainableNameAmount::BalanceUnderAmount {
- balance = request_achainable_balance(addresses, achainable_param.clone())?
- .parse::()
- .map_err(|_| {
- Error::RequestVCFailed(
- Assertion::Achainable(achainable_param.clone()),
- ErrorDetail::ParseError,
- )
- })?;
+ balance =
+ request_achainable_balance(addresses, achainable_param.clone(), data_provider_config)?
+ .parse::()
+ .map_err(|_| {
+ Error::RequestVCFailed(
+ Assertion::Achainable(achainable_param.clone()),
+ ErrorDetail::ParseError,
+ )
+ })?;
} else {
- flag = request_achainable(addresses, achainable_param.clone())?;
+ flag = request_achainable(addresses, achainable_param.clone(), data_provider_config)?;
}
match Credential::new(&req.who, &req.shard) {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/amount_holding.rs b/tee-worker/litentry/core/assertion-build/src/achainable/amount_holding.rs
index f51033e6db..9b2f151acb 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/amount_holding.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/amount_holding.rs
@@ -22,11 +22,12 @@ extern crate sgx_tstd as std;
use crate::{achainable::request_achainable_balance, *};
use lc_credentials::litentry_profile::token_balance::TokenBalanceInfo;
-use lc_data_providers::{ETokenAddress, TokenFromString};
+use lc_data_providers::{DataProviderConfig, ETokenAddress, TokenFromString};
pub fn build_amount_holding(
req: &AssertionBuildRequest,
param: AchainableAmountHolding,
+ data_provider_config: &DataProviderConfig,
) -> Result {
let identities = transpose_identity(&req.identities);
let addresses = identities
@@ -36,14 +37,15 @@ pub fn build_amount_holding(
let token = ETokenAddress::from_vec(param.clone().token.unwrap_or_default());
let achainable_param = AchainableParams::AmountHolding(param);
- let balance = request_achainable_balance(addresses, achainable_param.clone())?
- .parse::()
- .map_err(|_| {
- Error::RequestVCFailed(
- Assertion::Achainable(achainable_param.clone()),
- ErrorDetail::ParseError,
- )
- })?;
+ let balance =
+ request_achainable_balance(addresses, achainable_param.clone(), data_provider_config)?
+ .parse::()
+ .map_err(|_| {
+ Error::RequestVCFailed(
+ Assertion::Achainable(achainable_param.clone()),
+ ErrorDetail::ParseError,
+ )
+ })?;
match Credential::new(&req.who, &req.shard) {
Ok(mut credential_unsigned) => {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/amount_token.rs b/tee-worker/litentry/core/assertion-build/src/achainable/amount_token.rs
index 77c2615edd..3c4ee1df34 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/amount_token.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/amount_token.rs
@@ -29,7 +29,7 @@ use lc_credentials::{
litentry_profile::token_balance::TokenBalanceInfo,
};
use lc_data_providers::{
- achainable_names::AchainableNameAmountToken, ETokenAddress, TokenFromString,
+ achainable_names::AchainableNameAmountToken, DataProviderConfig, ETokenAddress, TokenFromString,
};
/// ERC20 Holder: USDC and others
@@ -53,6 +53,7 @@ use lc_data_providers::{
pub fn build_amount_token(
req: &AssertionBuildRequest,
param: AchainableAmountToken,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!("Assertion Building AchainableAmountToken");
@@ -75,7 +76,8 @@ pub fn build_amount_token(
})?;
match amount_token_name {
AchainableNameAmountToken::LITHoldingAmount => {
- let lit_holding_amount = query_lit_holding_amount(&achainable_param, &identities)?;
+ let lit_holding_amount =
+ query_lit_holding_amount(&achainable_param, &identities, data_provider_config)?;
credential.update_lit_holding_amount(lit_holding_amount);
},
_ => {
@@ -85,14 +87,18 @@ pub fn build_amount_token(
.flat_map(|(_, addresses)| addresses)
.collect::>();
let token = ETokenAddress::from_vec(param.token.unwrap_or_default());
- let balance = request_achainable_balance(addresses, achainable_param.clone())?
- .parse::()
- .map_err(|_| {
- Error::RequestVCFailed(
- Assertion::Achainable(achainable_param.clone()),
- ErrorDetail::ParseError,
- )
- })?;
+ let balance = request_achainable_balance(
+ addresses,
+ achainable_param.clone(),
+ data_provider_config,
+ )?
+ .parse::()
+ .map_err(|_| {
+ Error::RequestVCFailed(
+ Assertion::Achainable(achainable_param.clone()),
+ ErrorDetail::ParseError,
+ )
+ })?;
credential.update_token_balance(token, balance);
},
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/amounts.rs b/tee-worker/litentry/core/assertion-build/src/achainable/amounts.rs
index 7d6bb4c74a..826f423b40 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/amounts.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/amounts.rs
@@ -21,8 +21,13 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::{achainable::request_achainable, *};
+use lc_data_providers::DataProviderConfig;
-pub fn build_amounts(req: &AssertionBuildRequest, param: AchainableAmounts) -> Result {
+pub fn build_amounts(
+ req: &AssertionBuildRequest,
+ param: AchainableAmounts,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion Achainable build_amounts, who: {:?}", account_id_to_string(&req.who));
let identities = transpose_identity(&req.identities);
@@ -32,7 +37,7 @@ pub fn build_amounts(req: &AssertionBuildRequest, param: AchainableAmounts) -> R
.collect::>();
let achainable_param = AchainableParams::Amounts(param);
- let _flag = request_achainable(addresses, achainable_param.clone())?;
+ let _flag = request_achainable(addresses, achainable_param.clone(), data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut _credential_unsigned) => Ok(_credential_unsigned),
Err(e) => {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/basic.rs b/tee-worker/litentry/core/assertion-build/src/achainable/basic.rs
index cc305089e1..e8310b5c4f 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/basic.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/basic.rs
@@ -25,9 +25,13 @@ use crate::{
*,
};
use lc_credentials::achainable::{bab_holder::UpdateBABHolder, uniswap_user::UpdateUniswapUser};
-use lc_data_providers::achainable_names::AchainableNameBasic;
+use lc_data_providers::{achainable_names::AchainableNameBasic, DataProviderConfig};
-pub fn build_basic(req: &AssertionBuildRequest, param: AchainableBasic) -> Result {
+pub fn build_basic(
+ req: &AssertionBuildRequest,
+ param: AchainableBasic,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion Achainable building Basic");
let identities = transpose_identity(&req.identities);
@@ -52,11 +56,13 @@ pub fn build_basic(req: &AssertionBuildRequest, param: AchainableBasic) -> Resul
})?;
match basic_name {
AchainableNameBasic::UniswapV23User => {
- let (v2_user, v3_user) = request_uniswap_v2_or_v3_user(addresses, achainable_param)?;
+ let (v2_user, v3_user) =
+ request_uniswap_v2_or_v3_user(addresses, achainable_param, data_provider_config)?;
credential.update_uniswap_user(v2_user, v3_user);
},
AchainableNameBasic::BABHolder => {
- let is_bab_holder = request_achainable(addresses, achainable_param)?;
+ let is_bab_holder =
+ request_achainable(addresses, achainable_param, data_provider_config)?;
credential.update_bab_holder(is_bab_holder);
},
}
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/between_percents.rs b/tee-worker/litentry/core/assertion-build/src/achainable/between_percents.rs
index aeeec91e67..33334f063a 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/between_percents.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/between_percents.rs
@@ -21,10 +21,12 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::{achainable::request_achainable, *};
+use lc_data_providers::DataProviderConfig;
pub fn build_between_percents(
req: &AssertionBuildRequest,
param: AchainableBetweenPercents,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!(
"Assertion Achainable build_between_percents, who: {:?}",
@@ -38,7 +40,7 @@ pub fn build_between_percents(
.collect::>();
let achainable_param = AchainableParams::BetweenPercents(param.clone());
- let _flag = request_achainable(addresses, achainable_param)?;
+ let _flag = request_achainable(addresses, achainable_param, data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut _credential_unsigned) => Ok(_credential_unsigned),
Err(e) => {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/class_of_year.rs b/tee-worker/litentry/core/assertion-build/src/achainable/class_of_year.rs
index 40e85cf65b..ae46cd4ae0 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/class_of_year.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/class_of_year.rs
@@ -22,6 +22,7 @@ extern crate sgx_tstd as std;
use crate::{achainable::request_achainable_classofyear, *};
use lc_credentials::Credential;
+use lc_data_providers::DataProviderConfig;
use lc_stf_task_sender::AssertionBuildRequest;
use litentry_primitives::{AchainableClassOfYear, AchainableParams};
use log::debug;
@@ -59,6 +60,7 @@ const VC_SUBJECT_TYPE: &str = "Account Class Of Year";
pub fn build_class_of_year(
req: &AssertionBuildRequest,
param: AchainableClassOfYear,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!("Assertion Achainable build_class_of_year, who: {:?}", account_id_to_string(&req.who));
let identities = transpose_identity(&req.identities);
@@ -68,7 +70,8 @@ pub fn build_class_of_year(
.collect::>();
let achainable_param = AchainableParams::ClassOfYear(param);
- let (ret, created_date) = request_achainable_classofyear(addresses, achainable_param.clone())?;
+ let (ret, created_date) =
+ request_achainable_classofyear(addresses, achainable_param.clone(), data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut credential_unsigned) => {
credential_unsigned.add_subject_info(VC_SUBJECT_DESCRIPTION, VC_SUBJECT_TYPE);
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/date.rs b/tee-worker/litentry/core/assertion-build/src/achainable/date.rs
index 1ab7a298a0..485280a149 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/date.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/date.rs
@@ -21,8 +21,13 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::{achainable::request_achainable, *};
+use lc_data_providers::DataProviderConfig;
-pub fn build_date(req: &AssertionBuildRequest, param: AchainableDate) -> Result {
+pub fn build_date(
+ req: &AssertionBuildRequest,
+ param: AchainableDate,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion Achainable build_date, who: {:?}", account_id_to_string(&req.who));
let identities = transpose_identity(&req.identities);
@@ -32,7 +37,7 @@ pub fn build_date(req: &AssertionBuildRequest, param: AchainableDate) -> Result<
.collect::>();
let achainable_param = AchainableParams::Date(param.clone());
- let _flag = request_achainable(addresses, achainable_param)?;
+ let _flag = request_achainable(addresses, achainable_param, data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut _credential_unsigned) => Ok(_credential_unsigned),
Err(e) => {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/date_interval.rs b/tee-worker/litentry/core/assertion-build/src/achainable/date_interval.rs
index 9248aa13dc..411e808d76 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/date_interval.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/date_interval.rs
@@ -22,10 +22,12 @@ extern crate sgx_tstd as std;
use crate::{achainable::request_achainable, *};
use lc_credentials::Credential;
+use lc_data_providers::DataProviderConfig;
pub fn build_date_interval(
req: &AssertionBuildRequest,
param: AchainableDateInterval,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!("Assertion Achainable build_date_interval, who: {:?}", account_id_to_string(&req.who));
@@ -36,7 +38,7 @@ pub fn build_date_interval(
.collect::>();
let achainable_param = AchainableParams::DateInterval(param.clone());
- let _flag = request_achainable(addresses, achainable_param)?;
+ let _flag = request_achainable(addresses, achainable_param, data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut _credential_unsigned) => Ok(_credential_unsigned),
Err(e) => {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/date_percent.rs b/tee-worker/litentry/core/assertion-build/src/achainable/date_percent.rs
index 145610a30e..7c10a93e93 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/date_percent.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/date_percent.rs
@@ -21,10 +21,12 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::{achainable::request_achainable, *};
+use lc_data_providers::DataProviderConfig;
pub fn build_date_percent(
req: &AssertionBuildRequest,
param: AchainableDatePercent,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!("Assertion Achainable build_date_percent, who: {:?}", account_id_to_string(&req.who));
@@ -35,7 +37,7 @@ pub fn build_date_percent(
.collect::>();
let achainable_param = AchainableParams::DatePercent(param.clone());
- let _flag = request_achainable(addresses, achainable_param)?;
+ let _flag = request_achainable(addresses, achainable_param, data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut _credential_unsigned) => Ok(_credential_unsigned),
Err(e) => {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/mirror.rs b/tee-worker/litentry/core/assertion-build/src/achainable/mirror.rs
index b9761e9e30..8623c759ad 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/mirror.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/mirror.rs
@@ -23,7 +23,7 @@ extern crate sgx_tstd as std;
use super::request_achainable;
use crate::*;
use lc_credentials::{litentry_profile::mirror::MirrorInfo, Credential};
-use lc_data_providers::achainable_names::AchainableNameMirror;
+use lc_data_providers::{achainable_names::AchainableNameMirror, DataProviderConfig};
use litentry_primitives::AchainableMirror;
// Request Inputs
@@ -46,7 +46,11 @@ use litentry_primitives::AchainableMirror;
// "includeMetadata": true
// }
-pub fn build_on_mirror(req: &AssertionBuildRequest, param: AchainableMirror) -> Result {
+pub fn build_on_mirror(
+ req: &AssertionBuildRequest,
+ param: AchainableMirror,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
let identities = transpose_identity(&req.identities);
let addresses = identities
.into_iter()
@@ -60,7 +64,7 @@ pub fn build_on_mirror(req: &AssertionBuildRequest, param: AchainableMirror) ->
e.into_error_detail(),
)
})?;
- let value = request_achainable(addresses, achainable_param.clone())?;
+ let value = request_achainable(addresses, achainable_param.clone(), data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut credential_unsigned) => {
credential_unsigned.update_mirror(mtype, value);
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/mod.rs b/tee-worker/litentry/core/assertion-build/src/achainable/mod.rs
index 4d765c556a..ca1c07fced 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/mod.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/mod.rs
@@ -32,7 +32,7 @@ use lc_data_providers::{
AchainableClient, AchainableTagDeFi, HoldingAmount, Params, ParamsBasicTypeWithAmountToken,
},
achainable_names::{AchainableNameAmountToken, GetAchainableName},
- DataProviderConfigReader, ReadDataProviderConfig, LIT_TOKEN_ADDRESS,
+ DataProviderConfig, LIT_TOKEN_ADDRESS,
};
use lc_stf_task_sender::AssertionBuildRequest;
use litentry_primitives::AchainableParams;
@@ -51,29 +51,41 @@ pub mod date_percent;
pub mod mirror;
pub mod token;
-pub fn build(req: &AssertionBuildRequest, param: AchainableParams) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ param: AchainableParams,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
match param {
- AchainableParams::AmountHolding(param) => build_amount_holding(req, param),
- AchainableParams::AmountToken(param) => build_amount_token(req, param),
- AchainableParams::Amount(param) => build_amount(req, param),
- AchainableParams::Amounts(param) => build_amounts(req, param),
- AchainableParams::Basic(param) => build_basic(req, param),
- AchainableParams::BetweenPercents(param) => build_between_percents(req, param),
- AchainableParams::ClassOfYear(param) => build_class_of_year(req, param),
- AchainableParams::DateInterval(param) => build_date_interval(req, param),
- AchainableParams::DatePercent(param) => build_date_percent(req, param),
- AchainableParams::Date(param) => build_date(req, param),
- AchainableParams::Token(param) => build_token(req, param),
- AchainableParams::Mirror(param) => build_on_mirror(req, param),
+ AchainableParams::AmountHolding(param) =>
+ build_amount_holding(req, param, data_provider_config),
+ AchainableParams::AmountToken(param) =>
+ build_amount_token(req, param, data_provider_config),
+ AchainableParams::Amount(param) => build_amount(req, param, data_provider_config),
+ AchainableParams::Amounts(param) => build_amounts(req, param, data_provider_config),
+ AchainableParams::Basic(param) => build_basic(req, param, data_provider_config),
+ AchainableParams::BetweenPercents(param) =>
+ build_between_percents(req, param, data_provider_config),
+ AchainableParams::ClassOfYear(param) =>
+ build_class_of_year(req, param, data_provider_config),
+ AchainableParams::DateInterval(param) =>
+ build_date_interval(req, param, data_provider_config),
+ AchainableParams::DatePercent(param) =>
+ build_date_percent(req, param, data_provider_config),
+ AchainableParams::Date(param) => build_date(req, param, data_provider_config),
+ AchainableParams::Token(param) => build_token(req, param, data_provider_config),
+ AchainableParams::Mirror(param) => build_on_mirror(req, param, data_provider_config),
}
}
-pub fn request_achainable(addresses: Vec, param: AchainableParams) -> Result {
+pub fn request_achainable(
+ addresses: Vec,
+ param: AchainableParams,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
let request_param = Params::try_from(param.clone())?;
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| Error::RequestVCFailed(Assertion::Achainable(param.clone()), e))?;
- let mut client: AchainableClient = AchainableClient::new(&data_provider_config);
+ let mut client: AchainableClient = AchainableClient::new(data_provider_config);
for address in &addresses {
let ret = client.query_system_label(address, request_param.clone()).map_err(|e| {
@@ -93,12 +105,11 @@ pub fn request_achainable(addresses: Vec, param: AchainableParams) -> Re
pub fn request_uniswap_v2_or_v3_user(
addresses: Vec,
param: AchainableParams,
+ data_provider_config: &DataProviderConfig,
) -> Result<(bool, bool)> {
let _request_param = Params::try_from(param.clone())?;
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| Error::RequestVCFailed(Assertion::Achainable(param.clone()), e))?;
- let mut client: AchainableClient = AchainableClient::new(&data_provider_config);
+ let mut client: AchainableClient = AchainableClient::new(data_provider_config);
let mut v2_user = false;
let mut v3_user = false;
@@ -119,12 +130,10 @@ const INVALID_CLASS_OF_YEAR: &str = "Invalid";
pub fn request_achainable_classofyear(
addresses: Vec,
param: AchainableParams,
+ data_provider_config: &DataProviderConfig,
) -> Result<(bool, String)> {
let request_param = Params::try_from(param.clone())?;
-
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| Error::RequestVCFailed(Assertion::Achainable(param.clone()), e))?;
- let mut client: AchainableClient = AchainableClient::new(&data_provider_config);
+ let mut client: AchainableClient = AchainableClient::new(data_provider_config);
let mut longest_created_year = INVALID_CLASS_OF_YEAR.into();
for address in &addresses {
@@ -148,12 +157,10 @@ pub fn request_achainable_classofyear(
pub fn request_achainable_balance(
addresses: Vec,
param: AchainableParams,
+ data_provider_config: &DataProviderConfig,
) -> Result {
let request_param = Params::try_from(param.clone())?;
-
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| Error::RequestVCFailed(Assertion::Achainable(param.clone()), e))?;
- let mut client: AchainableClient = AchainableClient::new(&data_provider_config);
+ let mut client: AchainableClient = AchainableClient::new(data_provider_config);
let balance = client.holding_amount(addresses, request_param).map_err(|e| {
Error::RequestVCFailed(Assertion::Achainable(param.clone()), e.into_error_detail())
})?;
@@ -164,12 +171,10 @@ pub fn request_achainable_balance(
pub fn query_lit_holding_amount(
aparam: &AchainableParams,
identities: &Vec<(Web3Network, Vec)>,
+ data_provider_config: &DataProviderConfig,
) -> Result {
let mut total_lit_balance = 0_f64;
-
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| Error::RequestVCFailed(Assertion::Achainable(aparam.clone()), e))?;
- let mut client: AchainableClient = AchainableClient::new(&data_provider_config);
+ let mut client: AchainableClient = AchainableClient::new(data_provider_config);
for (network, addresses) in identities {
let (q_name, q_network, q_token) = if *network == Web3Network::Ethereum {
diff --git a/tee-worker/litentry/core/assertion-build/src/achainable/token.rs b/tee-worker/litentry/core/assertion-build/src/achainable/token.rs
index 36e2cca667..6df95c7e6e 100644
--- a/tee-worker/litentry/core/assertion-build/src/achainable/token.rs
+++ b/tee-worker/litentry/core/assertion-build/src/achainable/token.rs
@@ -21,8 +21,13 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use crate::{achainable::request_achainable, *};
+use lc_data_providers::DataProviderConfig;
-pub fn build_token(req: &AssertionBuildRequest, param: AchainableToken) -> Result {
+pub fn build_token(
+ req: &AssertionBuildRequest,
+ param: AchainableToken,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Assertion Achainable build_token, who: {:?}", account_id_to_string(&req.who));
let identities = transpose_identity(&req.identities);
@@ -32,7 +37,7 @@ pub fn build_token(req: &AssertionBuildRequest, param: AchainableToken) -> Resul
.collect::>();
let achainable_param = AchainableParams::Token(param.clone());
- let _flag = request_achainable(addresses, achainable_param)?;
+ let _flag = request_achainable(addresses, achainable_param, data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut _credential_unsigned) => Ok(_credential_unsigned),
Err(e) => {
diff --git a/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs b/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs
index 09be442d97..93a07ef818 100644
--- a/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs
+++ b/tee-worker/litentry/core/assertion-build/src/brc20/amount_holder.rs
@@ -22,9 +22,12 @@ extern crate sgx_tstd as std;
use crate::*;
use lc_credentials::brc20::amount_holder::BRC20AmountHolderCredential;
-use lc_data_providers::geniidata::GeniidataClient;
+use lc_data_providers::{geniidata::GeniidataClient, DataProviderConfig};
-pub fn build(req: &AssertionBuildRequest) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
let identities = transpose_identity(&req.identities);
let addresses = identities
.into_iter()
@@ -35,7 +38,7 @@ pub fn build(req: &AssertionBuildRequest) -> Result {
error!("Generate unsigned credential failed {:?}", e);
Error::RequestVCFailed(Assertion::BRC20AmountHolder, e.into_error_detail())
})?;
- let mut client = GeniidataClient::new()
+ let mut client = GeniidataClient::new(data_provider_config)
.map_err(|e| Error::RequestVCFailed(Assertion::BRC20AmountHolder, e))?;
let response = client.create_brc20_amount_holder_sum(addresses).map_err(|e| {
Error::RequestVCFailed(
diff --git a/tee-worker/litentry/core/assertion-build/src/generic_discord_role.rs b/tee-worker/litentry/core/assertion-build/src/generic_discord_role.rs
index 3b16bebcea..002f111cf6 100644
--- a/tee-worker/litentry/core/assertion-build/src/generic_discord_role.rs
+++ b/tee-worker/litentry/core/assertion-build/src/generic_discord_role.rs
@@ -22,19 +22,23 @@ extern crate sgx_tstd as std;
use crate::*;
use lc_credentials::{generic_discord_role::GenericDiscordRoleAssertionUpdate, Credential};
-use lc_data_providers::{
- discord_litentry::DiscordLitentryClient, DataProviderConfigReader, ReadDataProviderConfig,
-};
+use lc_data_providers::{discord_litentry::DiscordLitentryClient, DataProviderConfig};
use lc_stf_task_sender::AssertionBuildRequest;
use litentry_primitives::{ContestType, GenericDiscordRoleType, SoraQuizType};
-
-pub fn build(req: &AssertionBuildRequest, rtype: GenericDiscordRoleType) -> Result {
- let role_id = get_generic_discord_role_id(&rtype).map_err(|error_detail| {
- Error::RequestVCFailed(Assertion::GenericDiscordRole(rtype.clone()), error_detail)
- })?;
+use std::string::ToString;
+
+pub fn build(
+ req: &AssertionBuildRequest,
+ rtype: GenericDiscordRoleType,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
+ let role_id =
+ get_generic_discord_role_id(&rtype, data_provider_config).map_err(|error_detail| {
+ Error::RequestVCFailed(Assertion::GenericDiscordRole(rtype.clone()), error_detail)
+ })?;
let mut has_role_value = false;
- let mut client = DiscordLitentryClient::new();
+ let mut client = DiscordLitentryClient::new(&data_provider_config.discord_litentry_url);
for identity in &req.identities {
if let Identity::Discord(address) = &identity.0 {
let resp =
@@ -69,18 +73,20 @@ pub fn build(req: &AssertionBuildRequest, rtype: GenericDiscordRoleType) -> Resu
fn get_generic_discord_role_id(
rtype: &GenericDiscordRoleType,
+ data_provider_config: &DataProviderConfig,
) -> core::result::Result {
- let data_provider_config = DataProviderConfigReader::read()?;
match rtype {
GenericDiscordRoleType::Contest(ctype) => match ctype {
- ContestType::Legend => Ok(data_provider_config.contest_legend_discord_role_id),
- ContestType::Popularity => Ok(data_provider_config.contest_popularity_discord_role_id),
+ ContestType::Legend =>
+ Ok(data_provider_config.contest_legend_discord_role_id.to_string()),
+ ContestType::Popularity =>
+ Ok(data_provider_config.contest_popularity_discord_role_id.to_string()),
ContestType::Participant =>
- Ok(data_provider_config.contest_participant_discord_role_id),
+ Ok(data_provider_config.contest_participant_discord_role_id.to_string()),
},
GenericDiscordRoleType::SoraQuiz(qtype) => match qtype {
- SoraQuizType::Attendee => Ok(data_provider_config.sora_quiz_attendee_id),
- SoraQuizType::Master => Ok(data_provider_config.sora_quiz_master_id),
+ SoraQuizType::Attendee => Ok(data_provider_config.sora_quiz_attendee_id.to_string()),
+ SoraQuizType::Master => Ok(data_provider_config.sora_quiz_master_id.to_string()),
},
}
}
@@ -90,7 +96,7 @@ mod tests {
use crate::{generic_discord_role::build, AccountId, AssertionBuildRequest};
use itp_stf_primitives::types::ShardIdentifier;
use lc_credentials::assertion_logic::{AssertionLogic, Op};
- use lc_data_providers::GLOBAL_DATA_PROVIDER_CONFIG;
+ use lc_data_providers::DataProviderConfig;
use lc_mock_server::run;
use litentry_primitives::{
Assertion, ContestType, GenericDiscordRoleType, Identity, IdentityNetworkTuple,
@@ -99,23 +105,20 @@ mod tests {
use log;
use std::{vec, vec::Vec};
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap();
- GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().set_discord_litentry_url(url);
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_contest_legend_discord_role_id("1034083718425493544".to_string());
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_sora_quiz_attendee_id("1034083718425493544".to_string());
+ let mut data_provider_conifg = DataProviderConfig::new();
+
+ data_provider_conifg.set_discord_litentry_url(url);
+ data_provider_conifg.set_contest_legend_discord_role_id("1034083718425493544".to_string());
+ data_provider_conifg.set_sora_quiz_attendee_id("1034083718425493544".to_string());
+ data_provider_conifg
}
#[test]
fn build_contest_role_works() {
- init();
+ let data_provider_config = init();
let handler_vec: Vec = "againstwar".to_string().as_bytes().to_vec();
@@ -137,7 +140,11 @@ mod tests {
req_ext_hash: Default::default(),
};
- match build(&req, GenericDiscordRoleType::Contest(ContestType::Legend)) {
+ match build(
+ &req,
+ GenericDiscordRoleType::Contest(ContestType::Legend),
+ &data_provider_config,
+ ) {
Ok(credential) => {
log::info!("build GenericDiscordRole Contest done");
assert_eq!(
@@ -158,7 +165,7 @@ mod tests {
#[test]
fn build_sora_quiz_role_works() {
- init();
+ let data_provider_config = init();
let handler_vec: Vec = "ericzhang.eth".to_string().as_bytes().to_vec();
@@ -180,7 +187,11 @@ mod tests {
req_ext_hash: Default::default(),
};
- match build(&req, GenericDiscordRoleType::SoraQuiz(SoraQuizType::Attendee)) {
+ match build(
+ &req,
+ GenericDiscordRoleType::SoraQuiz(SoraQuizType::Attendee),
+ &data_provider_config,
+ ) {
Ok(credential) => {
log::info!("build GenericDiscordRole SoraQuiz done");
assert_eq!(*(credential.credential_subject.values.first().unwrap()), false);
diff --git a/tee-worker/litentry/core/assertion-build/src/holding_time.rs b/tee-worker/litentry/core/assertion-build/src/holding_time.rs
index 26efeb5eff..5620c2c78c 100644
--- a/tee-worker/litentry/core/assertion-build/src/holding_time.rs
+++ b/tee-worker/litentry/core/assertion-build/src/holding_time.rs
@@ -24,8 +24,7 @@ use crate::*;
use lc_credentials::achainable::amount_holding_time::AchainableAmountHoldingTimeUpdate;
use lc_data_providers::{
achainable::{AchainableClient, AchainableHolder, ParamsBasicTypeWithAmountHolding},
- vec_to_string, DataProviderConfigReader, ReadDataProviderConfig, LIT_TOKEN_ADDRESS,
- WBTC_TOKEN_ADDRESS,
+ vec_to_string, DataProviderConfig, LIT_TOKEN_ADDRESS, WBTC_TOKEN_ADDRESS,
};
use litentry_primitives::AmountHoldingTimeType;
use std::string::ToString;
@@ -78,13 +77,15 @@ pub fn build(
req: &AssertionBuildRequest,
htype: AmountHoldingTimeType,
min_balance: ParameterString,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!("Assertion A4 build, who: {:?}", account_id_to_string(&req.who));
let q_min_balance = pre_build(&htype, &min_balance)?;
let identities = transpose_identity(&req.identities);
- let (is_hold, optimal_hold_index) = do_build(identities, &htype, &q_min_balance)
- .map_err(|e| emit_error(&htype, &min_balance, e))?;
+ let (is_hold, optimal_hold_index) =
+ do_build(identities, &htype, &q_min_balance, data_provider_config)
+ .map_err(|e| emit_error(&htype, &min_balance, e))?;
generate_vc(req, &htype, &q_min_balance, is_hold, optimal_hold_index)
.map_err(|e| emit_error(&htype, &min_balance, e))
@@ -107,9 +108,9 @@ fn do_build(
identities: Vec<(Web3Network, Vec)>,
htype: &AmountHoldingTimeType,
q_min_balance: &str,
+ data_provider_config: &DataProviderConfig,
) -> core::result::Result<(bool, usize), ErrorDetail> {
- let data_provider_config = DataProviderConfigReader::read()?;
- let mut client = AchainableClient::new(&data_provider_config);
+ let mut client = AchainableClient::new(data_provider_config);
let mut is_hold = false;
let mut optimal_hold_index = usize::MAX;
@@ -233,19 +234,20 @@ fn match_token_address(htype: &AmountHoldingTimeType, network: &Web3Network) ->
#[cfg(test)]
mod tests {
use super::*;
- use lc_data_providers::GLOBAL_DATA_PROVIDER_CONFIG;
use lc_mock_server::run;
use litentry_primitives::{AmountHoldingTimeType, Web3Network};
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap();
- GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().set_achainable_url(url);
+ let mut data_provider_config = DataProviderConfig::new();
+ data_provider_config.set_achainable_url(url);
+ data_provider_config
}
#[test]
fn do_build_lit_works() {
- init();
+ let data_provider_config = init();
let identities = vec![(
Web3Network::Litentry,
@@ -255,13 +257,14 @@ mod tests {
let htype = AmountHoldingTimeType::LIT;
let q_min_balance = "10".to_string();
- let (is_hold, _optimal_hold_index) = do_build(identities, &htype, &q_min_balance).unwrap();
+ let (is_hold, _optimal_hold_index) =
+ do_build(identities, &htype, &q_min_balance, &data_provider_config).unwrap();
assert!(is_hold);
}
#[test]
fn do_build_dot_works() {
- init();
+ let data_provider_config = init();
let identities = vec![(
Web3Network::Polkadot,
@@ -271,13 +274,13 @@ mod tests {
let q_min_balance = "10".to_string();
let (is_hold, _optimal_hold_index) =
- do_build(identities, &dot_type, &q_min_balance).unwrap();
+ do_build(identities, &dot_type, &q_min_balance, &data_provider_config).unwrap();
assert!(is_hold);
}
#[test]
fn do_build_wbtc_works() {
- init();
+ let data_provider_config = init();
let identities = vec![(
Web3Network::Ethereum,
@@ -289,13 +292,14 @@ mod tests {
let htype = AmountHoldingTimeType::WBTC;
let q_min_balance = "10".to_string();
- let (is_hold, _optimal_hold_index) = do_build(identities, &htype, &q_min_balance).unwrap();
+ let (is_hold, _optimal_hold_index) =
+ do_build(identities, &htype, &q_min_balance, &data_provider_config).unwrap();
assert!(is_hold);
}
#[test]
fn do_build_non_hold_works() {
- init();
+ let data_provider_config = init();
let identities = vec![(
Web3Network::Ethereum,
@@ -304,7 +308,8 @@ mod tests {
let htype = AmountHoldingTimeType::LIT;
let q_min_balance = "10".to_string();
- let (is_hold, optimal_hold_index) = do_build(identities, &htype, &q_min_balance).unwrap();
+ let (is_hold, optimal_hold_index) =
+ do_build(identities, &htype, &q_min_balance, &data_provider_config).unwrap();
assert!(!is_hold);
assert_eq!(optimal_hold_index, 0);
}
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 30759ff7a7..0c05d1d15c 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
@@ -33,16 +33,17 @@ use lc_data_providers::{
nodereal_jsonrpc::{
FungibleApiList, GetTokenBalance20Param, NoderealChain, NoderealJsonrpcClient,
},
- Error as DataProviderError,
+ DataProviderConfig, Error as DataProviderError,
};
use litentry_primitives::EVMTokenType;
fn get_holding_balance(
token_type: EVMTokenType,
addresses: Vec<(Web3Network, String)>,
+ data_provider_config: &DataProviderConfig,
) -> result::Result {
- let mut eth_client = NoderealJsonrpcClient::new(NoderealChain::Eth);
- let mut bsc_client = NoderealJsonrpcClient::new(NoderealChain::Bsc);
+ let mut eth_client = NoderealJsonrpcClient::new(NoderealChain::Eth, data_provider_config);
+ let mut bsc_client = NoderealJsonrpcClient::new(NoderealChain::Bsc, data_provider_config);
let mut total_balance = 0_f64;
let decimals = token_type.get_decimals();
@@ -73,7 +74,11 @@ fn get_holding_balance(
Ok(total_balance / decimals)
}
-pub fn build(req: &AssertionBuildRequest, token_type: EVMTokenType) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ token_type: EVMTokenType,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("evm amount holding: {:?}", token_type);
let identities: Vec<(Web3Network, Vec)> = transpose_identity(&req.identities);
@@ -85,14 +90,15 @@ pub fn build(req: &AssertionBuildRequest, token_type: EVMTokenType) -> Result>();
- let result = get_holding_balance(token_type.clone(), addresses).map_err(|e| {
- Error::RequestVCFailed(
- Assertion::EVMAmountHolding(token_type.clone()),
- ErrorDetail::DataProviderError(ErrorString::truncate_from(
- format!("{e:?}").as_bytes().to_vec(),
- )),
- )
- });
+ let result =
+ get_holding_balance(token_type.clone(), addresses, data_provider_config).map_err(|e| {
+ Error::RequestVCFailed(
+ Assertion::EVMAmountHolding(token_type.clone()),
+ ErrorDetail::DataProviderError(ErrorString::truncate_from(
+ format!("{e:?}").as_bytes().to_vec(),
+ )),
+ )
+ });
match result {
Ok(value) => match Credential::new(&req.who, &req.shard) {
@@ -118,7 +124,6 @@ mod tests {
use itp_stf_primitives::types::ShardIdentifier;
use itp_utils::hex::decode_hex;
use lc_credentials::assertion_logic::{AssertionLogic, Op};
- use lc_data_providers::GLOBAL_DATA_PROVIDER_CONFIG;
use lc_mock_server::run;
fn create_ton_token_assertion_logic() -> Box {
@@ -160,22 +165,19 @@ mod tests {
})
}
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap() + "/nodereal_jsonrpc/";
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_nodereal_api_key("d416f55179dbd0e45b1a8ed030e3".into());
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_nodereal_api_chain_network_url(url);
+ let mut data_provider_config = DataProviderConfig::default();
+
+ data_provider_config.set_nodereal_api_key("d416f55179dbd0e45b1a8ed030e3".into());
+ data_provider_config.set_nodereal_api_chain_network_url(url);
+ data_provider_config
}
#[test]
fn build_evm_amount_holding_works() {
- init();
+ let data_provider_config = init();
let identities: Vec = vec![
(Identity::Evm([0; 20].into()), vec![Web3Network::Ethereum]),
(Identity::Evm([0; 20].into()), vec![Web3Network::Ethereum, Web3Network::Bsc]),
@@ -194,7 +196,7 @@ mod tests {
req_ext_hash: Default::default(),
};
- match build(&req, EVMTokenType::Ton) {
+ match build(&req, EVMTokenType::Ton, &data_provider_config) {
Ok(credential) => {
log::info!("build EVMAmount holding done");
assert_eq!(
@@ -226,7 +228,7 @@ mod tests {
#[test]
fn build_evm_amount_holding_lt_min_works() {
- init();
+ let data_provider_config = init();
let address = decode_hex("0x85be4e2ccc9c85be8783798b6e8a101bdac6467f".as_bytes().to_vec())
.unwrap()
.as_slice()
@@ -248,7 +250,7 @@ mod tests {
req_ext_hash: Default::default(),
};
- match build(&req, EVMTokenType::Ton) {
+ match build(&req, EVMTokenType::Ton, &data_provider_config) {
Ok(credential) => {
log::info!("build EVMAmount holding done");
assert_eq!(
@@ -280,7 +282,7 @@ mod tests {
#[test]
fn build_evm_amount_holding_gte_max_works() {
- init();
+ let data_provider_config = init();
let address = decode_hex("0x90d53026a47ac20609accc3f2ddc9fb9b29bb310".as_bytes().to_vec())
.unwrap()
.as_slice()
@@ -302,7 +304,7 @@ mod tests {
req_ext_hash: Default::default(),
};
- match build(&req, EVMTokenType::Ton) {
+ match build(&req, EVMTokenType::Ton, &data_provider_config) {
Ok(credential) => {
log::info!("build EVMAmount holding done");
assert_eq!(
diff --git a/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_digit_domain_club_amount.rs b/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_digit_domain_club_amount.rs
index bf3b296029..a0d7854d32 100644
--- a/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_digit_domain_club_amount.rs
+++ b/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_digit_domain_club_amount.rs
@@ -23,11 +23,13 @@ extern crate sgx_tstd as std;
use super::{BnbDomainInfo, BnbDomainInfoInterface};
use crate::*;
use lc_credentials::nodereal::bnb_domain::bnb_digit_domain_club_amount::UpdateDigitDomainClubAmountCredential;
+use lc_data_providers::DataProviderConfig;
use litentry_primitives::BnbDigitDomainType;
pub fn build(
req: &AssertionBuildRequest,
digit_domain_type: BnbDigitDomainType,
+ data_provider_config: &DataProviderConfig,
) -> Result {
debug!("building digit_domain credential: {:?}", digit_domain_type);
@@ -37,7 +39,11 @@ pub fn build(
.flat_map(|(_, addresses)| addresses)
.collect::>();
- let amount = BnbDomainInfo.get_bnb_digit_domain_club_amount(&addresses, &digit_domain_type)?;
+ let amount = BnbDomainInfo.get_bnb_digit_domain_club_amount(
+ &addresses,
+ &digit_domain_type,
+ data_provider_config,
+ )?;
match Credential::new(&req.who, &req.shard) {
Ok(mut credential_unsigned) => {
credential_unsigned.update_digit_domain_club_amount(&digit_domain_type, amount);
diff --git a/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_domain_holding_amount.rs b/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_domain_holding_amount.rs
index a347770ddb..d765634f0c 100644
--- a/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_domain_holding_amount.rs
+++ b/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/bnb_domain_holding_amount.rs
@@ -21,11 +21,15 @@ compile_error!("feature \"std\" and feature \"sgx\" cannot be enabled at the sam
extern crate sgx_tstd as std;
use lc_credentials::nodereal::bnb_domain::bnb_domain_holding_amount::UpdateBnbDomainHoldingAmountCredential;
+use lc_data_providers::DataProviderConfig;
use super::{BnbDomainInfo, BnbDomainInfoInterface};
use crate::*;
-pub fn build(req: &AssertionBuildRequest) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("bnb domain holding amount");
let identities = transpose_identity(&req.identities);
@@ -34,7 +38,7 @@ pub fn build(req: &AssertionBuildRequest) -> Result {
.flat_map(|(_, addresses)| addresses)
.collect::>();
- let amount = BnbDomainInfo.get_bnb_domain_holding_amount(&addresses)?;
+ let amount = BnbDomainInfo.get_bnb_domain_holding_amount(&addresses, data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut credential_unsigned) => {
credential_unsigned.update_bnb_holding_amount(amount);
diff --git a/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/mod.rs b/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/mod.rs
index fe3f3d4f07..ec47649d60 100644
--- a/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/mod.rs
+++ b/tee-worker/litentry/core/assertion-build/src/nodereal/bnb_domain/mod.rs
@@ -26,7 +26,7 @@ pub mod bnb_domain_holding_amount;
use crate::*;
use lc_data_providers::{
nodereal::{BnbDomainApiList, DomainInfo, NoderealClient},
- DataProviderConfigReader, ReadDataProviderConfig,
+ DataProviderConfig,
};
use litentry_primitives::BnbDigitDomainType;
use serde::{Deserialize, Serialize};
@@ -37,26 +37,35 @@ impl BnbDomainInfo {
fn get_bnb_domain_data_by_owners(
&self,
owners: &[String],
+ config: &DataProviderConfig,
) -> core::result::Result {
- let config = DataProviderConfigReader::read()?;
- let mut client = NoderealClient::new(&config);
+ let mut client = NoderealClient::new(config);
client.by_owners(owners).map_err(|e| e.into_error_detail())
}
}
pub trait BnbDomainInfoInterface {
- fn get_bnb_domain_holding_amount(&self, addresses: &[String]) -> Result;
+ fn get_bnb_domain_holding_amount(
+ &self,
+ addresses: &[String],
+ config: &DataProviderConfig,
+ ) -> Result;
fn get_bnb_digit_domain_club_amount(
&self,
owners: &[String],
digit_domain_type: &BnbDigitDomainType,
+ data_provider_config: &DataProviderConfig,
) -> Result;
}
impl BnbDomainInfoInterface for BnbDomainInfo {
- fn get_bnb_domain_holding_amount(&self, owners: &[String]) -> Result {
+ fn get_bnb_domain_holding_amount(
+ &self,
+ owners: &[String],
+ data_provider_config: &DataProviderConfig,
+ ) -> Result {
let response = self
- .get_bnb_domain_data_by_owners(owners)
+ .get_bnb_domain_data_by_owners(owners, data_provider_config)
.map_err(|e| Error::RequestVCFailed(Assertion::BnbDomainHolding, e))?;
let owned_domains: Domains = Domains::from_value(&response)
@@ -69,10 +78,12 @@ impl BnbDomainInfoInterface for BnbDomainInfo {
&self,
owners: &[String],
digit_domain_type: &BnbDigitDomainType,
+ data_provider_config: &DataProviderConfig,
) -> Result {
- let response = self.get_bnb_domain_data_by_owners(owners).map_err(|e| {
- Error::RequestVCFailed(Assertion::BnbDigitDomainClub(digit_domain_type.clone()), e)
- })?;
+ let response =
+ self.get_bnb_domain_data_by_owners(owners, data_provider_config).map_err(|e| {
+ Error::RequestVCFailed(Assertion::BnbDigitDomainClub(digit_domain_type.clone()), e)
+ })?;
let owned_domains: Domains = Domains::from_value(&response).map_err(|e| {
Error::RequestVCFailed(Assertion::BnbDigitDomainClub(digit_domain_type.clone()), e)
diff --git a/tee-worker/litentry/core/assertion-build/src/nodereal/crypto_summary/mod.rs b/tee-worker/litentry/core/assertion-build/src/nodereal/crypto_summary/mod.rs
index 240374d32d..c80f4736ea 100644
--- a/tee-worker/litentry/core/assertion-build/src/nodereal/crypto_summary/mod.rs
+++ b/tee-worker/litentry/core/assertion-build/src/nodereal/crypto_summary/mod.rs
@@ -23,12 +23,16 @@ extern crate sgx_tstd as std;
use lc_credentials::nodereal::crypto_summary::{
summary::CryptoSummaryCredentialUpdate, CryptoSummaryClient,
};
+use lc_data_providers::DataProviderConfig;
use crate::*;
-pub fn build(req: &AssertionBuildRequest) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
let identities = transpose_identity(&req.identities);
- let (txs, summary) = CryptoSummaryClient::new()
+ let (txs, summary) = CryptoSummaryClient::new(data_provider_config)
.logic(&identities)
.map_err(|e| Error::RequestVCFailed(Assertion::CryptoSummary, e))?;
diff --git a/tee-worker/litentry/core/assertion-build/src/nodereal/nft_holder/weirdo_ghost_gang_holder.rs b/tee-worker/litentry/core/assertion-build/src/nodereal/nft_holder/weirdo_ghost_gang_holder.rs
index f4d3b13eb6..a7640315dd 100644
--- a/tee-worker/litentry/core/assertion-build/src/nodereal/nft_holder/weirdo_ghost_gang_holder.rs
+++ b/tee-worker/litentry/core/assertion-build/src/nodereal/nft_holder/weirdo_ghost_gang_holder.rs
@@ -28,7 +28,7 @@ use lc_data_providers::nodereal_jsonrpc::{
};
use crate::*;
-use lc_data_providers::Error as DataProviderError;
+use lc_data_providers::{DataProviderConfig, Error as DataProviderError};
const NFT_TOKEN_ADDRESS: &str = "0x9401518f4EBBA857BAA879D9f76E1Cc8b31ed197";
@@ -54,11 +54,14 @@ fn check_has_nft(
}
}
-pub fn build(req: &AssertionBuildRequest) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("WeirdoGhostGang holder");
let mut has_nft = false;
- let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth);
+ let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth, data_provider_config);
let identities: Vec<(Web3Network, Vec)> = transpose_identity(&req.identities);
let addresses = identities
@@ -112,25 +115,21 @@ mod tests {
use super::*;
use itp_stf_primitives::types::ShardIdentifier;
use lc_credentials::assertion_logic::{AssertionLogic, Op};
- use lc_data_providers::GLOBAL_DATA_PROVIDER_CONFIG;
use lc_mock_server::run;
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap() + "/nodereal_jsonrpc/";
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_nodereal_api_key("d416f55179dbd0e45b1a8ed030e3".into());
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_nodereal_api_chain_network_url(url);
+ let mut config = DataProviderConfig::new();
+
+ config.set_nodereal_api_key("d416f55179dbd0e45b1a8ed030e3".to_string());
+ config.set_nodereal_api_chain_network_url(url);
+ config
}
#[test]
fn build_weirdo_ghost_gang_holder_works() {
- init();
+ let config = init();
let identities: Vec =
vec![(Identity::Evm([0; 20].into()), vec![Web3Network::Ethereum])];
@@ -147,7 +146,7 @@ mod tests {
req_ext_hash: Default::default(),
};
- match build(&req) {
+ match build(&req, &config) {
Ok(credential) => {
log::info!("build WeirdoGhostGang holder done");
assert_eq!(
diff --git a/tee-worker/litentry/core/assertion-build/src/oneblock/course.rs b/tee-worker/litentry/core/assertion-build/src/oneblock/course.rs
index ec2210db4a..93e18a7605 100644
--- a/tee-worker/litentry/core/assertion-build/src/oneblock/course.rs
+++ b/tee-worker/litentry/core/assertion-build/src/oneblock/course.rs
@@ -22,15 +22,20 @@ extern crate sgx_tstd as std;
use crate::{oneblock::query_oneblock_status, *};
use lc_credentials::oneblock::OneBlockAssertionUpdate;
+use lc_data_providers::DataProviderConfig;
-pub fn build(req: &AssertionBuildRequest, course_type: OneBlockCourseType) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ course_type: OneBlockCourseType,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
let identities = transpose_identity(&req.identities);
let addresses = identities
.into_iter()
.flat_map(|(_, addresses)| addresses)
.collect::>();
- let value = query_oneblock_status(&course_type, addresses)?;
+ let value = query_oneblock_status(&course_type, addresses, data_provider_config)?;
match Credential::new(&req.who, &req.shard) {
Ok(mut credential_unsigned) => {
credential_unsigned.update_notion_assertion(&course_type, value);
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 06219b5351..7dc640138a 100644
--- a/tee-worker/litentry/core/assertion-build/src/oneblock/mod.rs
+++ b/tee-worker/litentry/core/assertion-build/src/oneblock/mod.rs
@@ -26,7 +26,7 @@ use crate::*;
use http::header::{AUTHORIZATION, CONNECTION};
use http_req::response::Headers;
use itc_rest_client::{error::Error as RestClientError, RestGet, RestPath};
-use lc_data_providers::{build_client, DataProviderConfigReader, ReadDataProviderConfig};
+use lc_data_providers::{build_client, DataProviderConfig};
use serde::{Deserialize, Serialize};
use std::string::ToString;
@@ -43,11 +43,12 @@ impl RestPath for OneBlockResponse {
}
}
-fn fetch_data_from_notion(course_type: &OneBlockCourseType) -> Result {
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| Error::RequestVCFailed(Assertion::Oneblock(course_type.clone()), e))?;
- let oneblock_notion_key = data_provider_config.oneblock_notion_key;
- let oneblock_notion_url = data_provider_config.oneblock_notion_url;
+fn fetch_data_from_notion(
+ course_type: &OneBlockCourseType,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
+ let oneblock_notion_key = data_provider_config.oneblock_notion_key.to_string();
+ let oneblock_notion_url = data_provider_config.oneblock_notion_url.to_string();
let mut headers = Headers::new();
headers.insert(CONNECTION.as_str(), "close");
@@ -174,8 +175,9 @@ impl OneBlockAssertionQualify for OneBlockData {
pub fn query_oneblock_status(
course_type: &OneBlockCourseType,
addresses: Vec,
+ data_provider_config: &DataProviderConfig,
) -> Result {
- let oneblock_response = fetch_data_from_notion(course_type)?;
+ let oneblock_response = fetch_data_from_notion(course_type, data_provider_config)?;
debug!("OneBlock Assertion Response: {oneblock_response:?}");
Ok(check_oneblock_data(&oneblock_response, course_type, addresses))
diff --git a/tee-worker/litentry/core/assertion-build/src/vip3/card.rs b/tee-worker/litentry/core/assertion-build/src/vip3/card.rs
index 90bac56961..bd12ec59f0 100644
--- a/tee-worker/litentry/core/assertion-build/src/vip3/card.rs
+++ b/tee-worker/litentry/core/assertion-build/src/vip3/card.rs
@@ -19,9 +19,14 @@ use crate::{
*,
};
use lc_credentials::vip3::UpdateVIP3MembershipCardCredential;
+use lc_data_providers::DataProviderConfig;
use litentry_primitives::VIP3MembershipCardLevel;
-pub fn build(req: &AssertionBuildRequest, level: VIP3MembershipCardLevel) -> Result {
+pub fn build(
+ req: &AssertionBuildRequest,
+ level: VIP3MembershipCardLevel,
+ data_provider_config: &DataProviderConfig,
+) -> Result {
debug!("Building VIP3 membership card level: {:?}", level);
let identities = transpose_identity(&req.identities);
@@ -30,7 +35,7 @@ pub fn build(req: &AssertionBuildRequest, level: VIP3MembershipCardLevel) -> Res
.flat_map(|(_, addresses)| addresses)
.collect::>();
- let mut sbt = VIP3SBTInfo::new()
+ let mut sbt = VIP3SBTInfo::new(data_provider_config)
.map_err(|e| Error::RequestVCFailed(Assertion::VIP3MembershipCard(level.clone()), e))?;
let value = sbt
.has_card_level(addresses, &level)
diff --git a/tee-worker/litentry/core/assertion-build/src/vip3/mod.rs b/tee-worker/litentry/core/assertion-build/src/vip3/mod.rs
index af72685f44..05e045e985 100644
--- a/tee-worker/litentry/core/assertion-build/src/vip3/mod.rs
+++ b/tee-worker/litentry/core/assertion-build/src/vip3/mod.rs
@@ -25,7 +25,7 @@ pub mod card;
use crate::*;
use lc_data_providers::{
vip3::{VIP3Client, VIP3QuerySet},
- DataProviderConfigReader, ReadDataProviderConfig,
+ DataProviderConfig,
};
use litentry_primitives::VIP3MembershipCardLevel;
@@ -34,9 +34,10 @@ pub struct VIP3SBTInfo {
}
impl VIP3SBTInfo {
- pub fn new() -> core::result::Result {
- let data_provider_config = DataProviderConfigReader::read()?;
- let client = VIP3Client::new(&data_provider_config);
+ pub fn new(
+ data_provider_config: &DataProviderConfig,
+ ) -> core::result::Result {
+ let client = VIP3Client::new(data_provider_config);
Ok(VIP3SBTInfo { client })
}
diff --git a/tee-worker/litentry/core/credentials/src/nodereal/crypto_summary/mod.rs b/tee-worker/litentry/core/credentials/src/nodereal/crypto_summary/mod.rs
index fc6ecf3d9e..42527c2ebd 100644
--- a/tee-worker/litentry/core/credentials/src/nodereal/crypto_summary/mod.rs
+++ b/tee-worker/litentry/core/credentials/src/nodereal/crypto_summary/mod.rs
@@ -25,6 +25,7 @@ use lc_data_providers::{
FungibleApiList, GetNFTHoldingsParam, NftApiList, NoderealChain, NoderealJsonrpcClient,
TransactionCount,
},
+ DataProviderConfig,
};
use litentry_primitives::{ErrorDetail, IntoErrorDetail};
use serde::{Deserialize, Serialize};
@@ -213,16 +214,10 @@ pub struct CryptoSummaryClient {
pub bsc_client: NoderealJsonrpcClient,
}
-impl Default for CryptoSummaryClient {
- fn default() -> Self {
- Self::new()
- }
-}
-
impl CryptoSummaryClient {
- pub fn new() -> Self {
- let eth_client = NoderealJsonrpcClient::new(NoderealChain::Eth);
- let bsc_client = NoderealJsonrpcClient::new(NoderealChain::Bsc);
+ pub fn new(data_provider_config: &DataProviderConfig) -> Self {
+ let eth_client = NoderealJsonrpcClient::new(NoderealChain::Eth, data_provider_config);
+ let bsc_client = NoderealJsonrpcClient::new(NoderealChain::Bsc, data_provider_config);
Self { eth_client, bsc_client }
}
diff --git a/tee-worker/litentry/core/data-providers/Cargo.toml b/tee-worker/litentry/core/data-providers/Cargo.toml
index e22440f17e..6eca7cb2b3 100644
--- a/tee-worker/litentry/core/data-providers/Cargo.toml
+++ b/tee-worker/litentry/core/data-providers/Cargo.toml
@@ -15,7 +15,6 @@ thiserror = { version = "1.0.26", optional = true }
url = { version = "2.0.0", optional = true }
# no_std dependencies
-lazy_static = { version = "1.4.0", features = ["spin_no_std"] }
log = { version = "0.4", default-features = false }
serde = { version = "1.0", default-features = false, features = ["derive", "alloc"] }
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
@@ -23,6 +22,7 @@ serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
# internal dependencies
itc-rest-client = { path = "../../../core/rest-client", default-features = false }
itp-rpc = { path = "../../../core-primitives/rpc", default-features = false }
+itp-utils = { path = "../../../core-primitives/utils", default-features = false }
# sgx dependencies
chrono_sgx = { package = "chrono", git = "https://github.com/mesalock-linux/chrono-sgx", optional = true }
@@ -61,6 +61,7 @@ std = [
"url",
"itc-rest-client/std",
"itp-rpc/std",
+ "itp-utils/std",
"log/std",
"serde/std",
"serde_json/std",
diff --git a/tee-worker/litentry/core/data-providers/src/achainable.rs b/tee-worker/litentry/core/data-providers/src/achainable.rs
index db97dbc371..d60be8c4dc 100644
--- a/tee-worker/litentry/core/data-providers/src/achainable.rs
+++ b/tee-worker/litentry/core/data-providers/src/achainable.rs
@@ -1425,7 +1425,7 @@ mod tests {
AchainableAccountTotalTransactions, AchainableClient, AchainableTagAccount,
AchainableTagBalance, AchainableTagDeFi, AchainableTagDotsama, AchainableUtils,
},
- DataProviderConfigReader, ReadDataProviderConfig, GLOBAL_DATA_PROVIDER_CONFIG,
+ DataProviderConfig,
};
use lc_mock_server::run;
use litentry_primitives::Web3Network;
@@ -1434,9 +1434,9 @@ mod tests {
fn new_achainable_client() -> AchainableClient {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap();
- GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().set_achainable_url(url);
- let data_provider_config = DataProviderConfigReader::read().unwrap();
+ let mut data_provider_config = DataProviderConfig::new();
+ data_provider_config.set_achainable_url(url);
AchainableClient::new(&data_provider_config)
}
diff --git a/tee-worker/litentry/core/data-providers/src/discord_litentry.rs b/tee-worker/litentry/core/data-providers/src/discord_litentry.rs
index 7d5bcdeb3d..99ce9d60d6 100644
--- a/tee-worker/litentry/core/data-providers/src/discord_litentry.rs
+++ b/tee-worker/litentry/core/data-providers/src/discord_litentry.rs
@@ -17,7 +17,7 @@
#[cfg(all(not(feature = "std"), feature = "sgx"))]
use crate::sgx_reexport_prelude::*;
-use crate::{build_client, vec_to_string, Error, HttpError, GLOBAL_DATA_PROVIDER_CONFIG};
+use crate::{build_client, vec_to_string, Error, HttpError};
use http::header::CONNECTION;
use http_req::response::Headers;
use itc_rest_client::{
@@ -28,7 +28,6 @@ use itc_rest_client::{
use log::*;
use serde::{Deserialize, Serialize};
use std::{
- default::Default,
format,
string::{String, ToString},
vec,
@@ -54,25 +53,11 @@ pub struct DiscordLitentryClient {
client: RestClient>,
}
-impl Default for DiscordLitentryClient {
- fn default() -> Self {
- Self::new()
- }
-}
-
impl DiscordLitentryClient {
- pub fn new() -> Self {
+ pub fn new(url: &str) -> Self {
let mut headers = Headers::new();
headers.insert(CONNECTION.as_str(), "close");
- let client = build_client(
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .discord_litentry_url
- .clone()
- .as_str(),
- headers,
- );
+ let client = build_client(url, headers);
DiscordLitentryClient { client }
}
@@ -170,32 +155,35 @@ impl DiscordLitentryClient {
#[cfg(test)]
mod tests {
use super::*;
+ use crate::DataProviderConfig;
use lc_mock_server::run;
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap();
- GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().set_discord_litentry_url(url);
+ let mut data_provider_config = DataProviderConfig::new();
+ data_provider_config.set_discord_litentry_url(url);
+ data_provider_config
}
#[test]
fn check_join_work() {
- init();
+ let data_provider_config = init();
let guild_id = "919848390156767232".as_bytes().to_vec();
let handler = "againstwar".as_bytes().to_vec();
- let mut client = DiscordLitentryClient::new();
+ let mut client = DiscordLitentryClient::new(&data_provider_config.discord_litentry_url);
let response = client.check_join(guild_id, handler);
assert!(response.is_ok(), "check join discord error: {:?}", response);
}
#[test]
fn check_id_hubber_work() {
- init();
+ let data_provider_config = init();
let guild_id = "919848390156767232".as_bytes().to_vec();
let channel_id = "919848392035794945".as_bytes().to_vec();
let role_id = "1034083718425493544".as_bytes().to_vec();
let handler = "ericzhang.eth".as_bytes().to_vec();
- let mut client = DiscordLitentryClient::new();
+ let mut client = DiscordLitentryClient::new(&data_provider_config.discord_litentry_url);
let response = client.check_id_hubber(guild_id, channel_id, role_id, handler);
assert!(response.is_ok(), "check discord id hubber error: {:?}", response);
}
diff --git a/tee-worker/litentry/core/data-providers/src/discord_official.rs b/tee-worker/litentry/core/data-providers/src/discord_official.rs
index ffcaba4f03..5ab8a73293 100644
--- a/tee-worker/litentry/core/data-providers/src/discord_official.rs
+++ b/tee-worker/litentry/core/data-providers/src/discord_official.rs
@@ -118,25 +118,25 @@ impl DiscordOfficialClient {
#[cfg(test)]
mod tests {
- use crate::{DataProviderConfigReader, ReadDataProviderConfig, GLOBAL_DATA_PROVIDER_CONFIG};
use super::*;
use lc_mock_server::run;
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap();
- GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().set_discord_official_url(url);
+ let mut data_provider_config = DataProviderConfig::new();
+ data_provider_config.set_discord_official_url(url);
+ data_provider_config
}
#[test]
fn query_message_work() {
- init();
+ let data_provider_config = init();
let channel_id = "919848392035794945";
let message_id = "1";
- let data_provider_config = DataProviderConfigReader::read().unwrap();
let mut client = DiscordOfficialClient::new(&data_provider_config);
let result =
client.query_message(channel_id.as_bytes().to_vec(), message_id.as_bytes().to_vec());
diff --git a/tee-worker/litentry/core/data-providers/src/geniidata.rs b/tee-worker/litentry/core/data-providers/src/geniidata.rs
index 8857fb8d0d..a7e7861c9c 100644
--- a/tee-worker/litentry/core/data-providers/src/geniidata.rs
+++ b/tee-worker/litentry/core/data-providers/src/geniidata.rs
@@ -20,10 +20,7 @@ use crate::sgx_reexport_prelude::*;
#[cfg(all(not(feature = "std"), feature = "sgx"))]
extern crate sgx_tstd as std;
-use crate::{
- build_client_with_cert, DataProviderConfigReader, Error as DataProviderError,
- ReadDataProviderConfig,
-};
+use crate::{build_client_with_cert, DataProviderConfig, Error as DataProviderError};
use http::header::{ACCEPT, CONNECTION};
use http_req::response::Headers;
use itc_rest_client::{
@@ -79,9 +76,9 @@ pub struct GeniidataClient {
}
impl GeniidataClient {
- pub fn new() -> core::result::Result {
- let data_provider_config = DataProviderConfigReader::read()?;
-
+ pub fn new(
+ data_provider_config: &DataProviderConfig,
+ ) -> core::result::Result {
let mut headers = Headers::new();
headers.insert(CONNECTION.as_str(), "close");
headers.insert(ACCEPT.as_str(), "application/json");
diff --git a/tee-worker/litentry/core/data-providers/src/lib.rs b/tee-worker/litentry/core/data-providers/src/lib.rs
index 30216ff696..030f4c66df 100644
--- a/tee-worker/litentry/core/data-providers/src/lib.rs
+++ b/tee-worker/litentry/core/data-providers/src/lib.rs
@@ -44,23 +44,18 @@ use itc_rest_client::{
http_client::{DefaultSend, HttpClient},
rest_client::RestClient,
};
-use lazy_static::lazy_static;
+use itp_utils::if_not_production;
use log::debug;
use serde::{Deserialize, Serialize};
use std::vec;
-#[cfg(feature = "std")]
-use std::sync::RwLock;
-#[cfg(feature = "sgx")]
-use std::sync::SgxRwLock as RwLock;
-
use itc_rest_client::http_client::SendWithCertificateVerification;
use litentry_primitives::{
AchainableParams, Assertion, ErrorDetail, ErrorString, IntoErrorDetail, ParameterString,
VCMPError,
};
use std::{
- format,
+ env, format,
string::{String, ToString},
vec::Vec,
};
@@ -168,7 +163,7 @@ impl TokenFromString for ETokenAddress {
}
}
-#[derive(PartialEq, Eq, Clone, Encode, Decode, Serialize, Deserialize)]
+#[derive(PartialEq, Eq, Clone, Encode, Decode, Serialize, Deserialize, Debug)]
pub struct DataProviderConfig {
pub twitter_official_url: String,
pub twitter_litentry_url: String,
@@ -204,32 +199,115 @@ impl Default for DataProviderConfig {
impl DataProviderConfig {
pub fn new() -> Self {
- DataProviderConfig {
+ std::println!("Initializing data providers config");
+
+ // default prod config
+ let mut config = DataProviderConfig {
twitter_official_url: "https://api.twitter.com".to_string(),
- twitter_litentry_url: "".to_string(),
- twitter_auth_token_v2: "Bearer ".to_string(),
+ twitter_litentry_url: "http://127.0.0.1:9527”".to_string(),
+ twitter_auth_token_v2: "".to_string(),
discord_official_url: "https://discordapp.com".to_string(),
- discord_litentry_url: "".to_string(),
+ discord_litentry_url: "http://127.0.0.1:9527”".to_string(),
discord_auth_token: "".to_string(),
- achainable_url: "https://graph.tdf-labs.io/".to_string(),
+ achainable_url: "https://label-production.graph.tdf-labs.io/".to_string(),
achainable_auth_key: "".to_string(),
- credential_endpoint: "".to_string(),
+ credential_endpoint: "wss://tee-staging.litentry.io".to_string(),
oneblock_notion_key: "".to_string(),
- oneblock_notion_url: "".to_string(),
- sora_quiz_master_id: "".to_string(),
- sora_quiz_attendee_id: "".to_string(),
- nodereal_api_key: "".to_string(),
+ oneblock_notion_url:
+ "https://api.notion.com/v1/blocks/e4068e6a326243468f35dcdc0c43f686/children"
+ .to_string(),
+ sora_quiz_master_id: "1164463721989554218".to_string(),
+ sora_quiz_attendee_id: "1166941149219532800".to_string(),
+ nodereal_api_key: "https://{chain}-{network}.nodereal.io/".to_string(),
nodereal_api_retry_delay: 5000,
nodereal_api_retry_times: 2,
- nodereal_api_url: "".to_string(),
+ nodereal_api_url: "https://open-platform.nodereal.io/".to_string(),
nodereal_api_chain_network_url: "".to_string(),
- contest_legend_discord_role_id: "".to_string(),
- contest_popularity_discord_role_id: "".to_string(),
- contest_participant_discord_role_id: "".to_string(),
- vip3_url: "".to_string(),
- geniidata_url: "".to_string(),
+ contest_legend_discord_role_id: "1172576273063739462".to_string(),
+ contest_popularity_discord_role_id: "1172576681119195208".to_string(),
+ contest_participant_discord_role_id: "1172576734135210104".to_string(),
+ vip3_url: "https://dappapi.vip3.io/".to_string(),
+ geniidata_url: "https://api.geniidata.com/api/1/brc20/balance?".to_string(),
geniidata_api_key: "".to_string(),
+ };
+
+ // we allow to override following config properties for non prod dev
+ if_not_production!({
+ if let Ok(v) = env::var("TWITTER_OFFICIAL_URL") {
+ config.set_twitter_official_url(v);
+ }
+ if let Ok(v) = env::var("TWITTER_LITENTRY_URL") {
+ config.set_twitter_litentry_url(v);
+ }
+ if let Ok(v) = env::var("DISCORD_OFFICIAL_URL") {
+ config.set_discord_official_url(v);
+ }
+ if let Ok(v) = env::var("DISCORD_LITENTRY_URL") {
+ config.set_discord_litentry_url(v);
+ }
+ if let Ok(v) = env::var("ACHAINABLE_URL") {
+ config.set_achainable_url(v);
+ }
+ if let Ok(v) = env::var("CREDENTIAL_ENDPOINT") {
+ config.set_credential_endpoint(v);
+ }
+ if let Ok(v) = env::var("ONEBLOCK_NOTION_URL") {
+ config.set_oneblock_notion_url(v);
+ }
+ if let Ok(v) = env::var("SORA_QUIZ_MASTER_ID") {
+ config.set_sora_quiz_master_id(v);
+ }
+ if let Ok(v) = env::var("SORA_QUIZ_ATTENDEE_ID") {
+ config.set_sora_quiz_attendee_id(v);
+ }
+ if let Ok(v) = env::var("NODEREAL_API_URL") {
+ config.set_nodereal_api_url(v);
+ }
+ if let Ok(v) = env::var("NODEREAL_API_RETRY_DELAY") {
+ config.set_nodereal_api_retry_delay(v.parse::().unwrap());
+ }
+ if let Ok(v) = env::var("NODEREAL_API_RETRY_TIME") {
+ config.set_nodereal_api_retry_times(v.parse::().unwrap());
+ }
+ if let Ok(v) = env::var("NODEREAL_API_CHAIN_NETWORK_URL") {
+ config.set_nodereal_api_chain_network_url(v);
+ }
+ if let Ok(v) = env::var("CONTEST_LEGEND_DISCORD_ROLE_ID") {
+ config.set_contest_legend_discord_role_id(v);
+ }
+ if let Ok(v) = env::var("CONTEST_POPULARITY_DISCORD_ROLE_ID") {
+ config.set_contest_popularity_discord_role_id(v);
+ }
+ if let Ok(v) = env::var("CONTEST_PARTICIPANT_DISCORD_ROLE_ID") {
+ config.set_contest_participant_discord_role_id(v);
+ }
+ if let Ok(v) = env::var("VIP3_URL") {
+ config.set_vip3_url(v);
+ }
+ if let Ok(v) = env::var("GENIIDATA_URL") {
+ config.set_geniidata_url(v);
+ }
+ });
+ // set secrets from env variables
+ if let Ok(v) = env::var("TWITTER_AUTH_TOKEN_V2") {
+ config.set_twitter_auth_token_v2(v);
+ }
+ if let Ok(v) = env::var("DISCORD_AUTH_TOKEN") {
+ config.set_discord_auth_token(v);
+ }
+ if let Ok(v) = env::var("ACHAINABLE_AUTH_KEY") {
+ config.set_achainable_auth_key(v);
}
+ if let Ok(v) = env::var("ONEBLOCK_NOTION_KEY") {
+ config.set_oneblock_notion_key(v);
+ }
+ if let Ok(v) = env::var("NODEREAL_API_KEY") {
+ config.set_nodereal_api_key(v);
+ }
+ if let Ok(v) = env::var("GENIIDATA_API_KEY") {
+ config.set_geniidata_api_key(v);
+ }
+ config
}
pub fn set_twitter_official_url(&mut self, v: String) {
debug!("set_twitter_official_url: {:?}", v);
@@ -329,27 +407,6 @@ impl DataProviderConfig {
}
}
-lazy_static! {
- pub static ref GLOBAL_DATA_PROVIDER_CONFIG: RwLock =
- RwLock::new(DataProviderConfig::new());
-}
-
-pub struct DataProviderConfigReader;
-pub trait ReadDataProviderConfig {
- fn read() -> Result;
-}
-
-impl ReadDataProviderConfig for DataProviderConfigReader {
- fn read() -> Result {
- match GLOBAL_DATA_PROVIDER_CONFIG.read() {
- Ok(c) => Ok(c.clone()),
- Err(e) => Err(ErrorDetail::DataProviderError(ErrorString::truncate_from(
- format!("{e:?}").as_bytes().to_vec(),
- ))),
- }
- }
-}
-
#[derive(Debug, thiserror::Error, Clone)]
pub enum Error {
#[error("Request error: {0}")]
diff --git a/tee-worker/litentry/core/data-providers/src/nodereal_jsonrpc.rs b/tee-worker/litentry/core/data-providers/src/nodereal_jsonrpc.rs
index a028429bc5..7dd24cbc36 100644
--- a/tee-worker/litentry/core/data-providers/src/nodereal_jsonrpc.rs
+++ b/tee-worker/litentry/core/data-providers/src/nodereal_jsonrpc.rs
@@ -17,7 +17,7 @@
#[cfg(all(not(feature = "std"), feature = "sgx"))]
use crate::sgx_reexport_prelude::*;
-use crate::{build_client, hex_to_decimal, Error, HttpError, GLOBAL_DATA_PROVIDER_CONFIG};
+use crate::{build_client, hex_to_decimal, DataProviderConfig, Error, HttpError};
use http::header::CONNECTION;
use http_req::response::Headers;
use itc_rest_client::{
@@ -100,15 +100,11 @@ pub struct NoderealJsonrpcClient {
}
impl NoderealJsonrpcClient {
- pub fn new(chain: NoderealChain) -> Self {
- let api_key = GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().nodereal_api_key.clone();
- let api_retry_delay = GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().nodereal_api_retry_delay;
- let api_retry_times = GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().nodereal_api_retry_times;
- let api_url = GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .nodereal_api_chain_network_url
- .clone();
+ pub fn new(chain: NoderealChain, data_provider_config: &DataProviderConfig) -> Self {
+ let api_key = data_provider_config.nodereal_api_key.clone();
+ let api_retry_delay = data_provider_config.nodereal_api_retry_delay;
+ let api_retry_times = data_provider_config.nodereal_api_retry_times;
+ let api_url = data_provider_config.nodereal_api_chain_network_url.clone();
let base_url = api_url.replace("{chain}", chain.to_string());
let mut headers = Headers::new();
@@ -415,23 +411,20 @@ mod tests {
use super::*;
use lc_mock_server::run;
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap() + "/nodereal_jsonrpc/";
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_nodereal_api_key("d416f55179dbd0e45b1a8ed030e3".into());
- GLOBAL_DATA_PROVIDER_CONFIG
- .write()
- .unwrap()
- .set_nodereal_api_chain_network_url(url);
+
+ let mut config = DataProviderConfig::new();
+ config.set_nodereal_api_key("d416f55179dbd0e45b1a8ed030e3".to_string());
+ config.set_nodereal_api_chain_network_url(url);
+ config
}
#[test]
fn does_get_nft_holdings_works() {
- init();
- let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth);
+ let config = init();
+ let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth, &config);
let param = GetNFTHoldingsParam {
account_address: "0x49AD262C49C7aA708Cc2DF262eD53B64A17Dd5EE".into(),
token_type: "ERC721".into(),
@@ -449,8 +442,8 @@ mod tests {
#[test]
fn does_get_token_balance_721_works() {
- init();
- let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth);
+ let config = init();
+ let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth, &config);
let param = GetTokenBalance721Param {
token_address: "0x07D971C03553011a48E951a53F48632D37652Ba1".into(),
account_address: "0x49AD262C49C7aA708Cc2DF262eD53B64A17Dd5EE".into(),
@@ -462,8 +455,8 @@ mod tests {
#[test]
fn does_get_token_balance_20_works() {
- init();
- let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth);
+ let config = init();
+ let mut client = NoderealJsonrpcClient::new(NoderealChain::Eth, &config);
let param = GetTokenBalance20Param {
contract_address: "0x76A797A59Ba2C17726896976B7B3747BfD1d220f".into(),
address: "0x85Be4e2ccc9c85BE8783798B6e8A101BDaC6467F".into(),
diff --git a/tee-worker/litentry/core/data-providers/src/twitter_official.rs b/tee-worker/litentry/core/data-providers/src/twitter_official.rs
index 5936e1316b..5039b2194b 100644
--- a/tee-worker/litentry/core/data-providers/src/twitter_official.rs
+++ b/tee-worker/litentry/core/data-providers/src/twitter_official.rs
@@ -17,9 +17,7 @@
#[cfg(all(not(feature = "std"), feature = "sgx"))]
use crate::sgx_reexport_prelude::*;
-use crate::{
- build_client_with_cert, vec_to_string, Error, HttpError, UserInfo, GLOBAL_DATA_PROVIDER_CONFIG,
-};
+use crate::{build_client_with_cert, vec_to_string, Error, HttpError, UserInfo};
use http::header::{AUTHORIZATION, CONNECTION};
use http_req::response::Headers;
use itc_rest_client::{
@@ -157,27 +155,11 @@ impl TargetUser {
/// rate limit: https://developer.twitter.com/en/docs/twitter-api/rate-limits
impl TwitterOfficialClient {
- pub fn v2() -> Self {
+ pub fn v2(url: &str, token: &str) -> Self {
let mut headers = Headers::new();
headers.insert(CONNECTION.as_str(), "close");
- headers.insert(
- AUTHORIZATION.as_str(),
- GLOBAL_DATA_PROVIDER_CONFIG
- .read()
- .unwrap()
- .twitter_auth_token_v2
- .clone()
- .as_str(),
- );
- let client = build_client_with_cert(
- GLOBAL_DATA_PROVIDER_CONFIG
- .read()
- .unwrap()
- .twitter_official_url
- .clone()
- .as_str(),
- headers.clone(),
- );
+ headers.insert(AUTHORIZATION.as_str(), token);
+ let client = build_client_with_cert(url, headers.clone());
TwitterOfficialClient { client }
}
@@ -267,20 +249,24 @@ impl TwitterOfficialClient {
#[cfg(test)]
mod tests {
use super::*;
+ use crate::DataProviderConfig;
use lc_mock_server::run;
- fn init() {
+ fn init() -> DataProviderConfig {
let _ = env_logger::builder().is_test(true).try_init();
let url = run(0).unwrap();
- GLOBAL_DATA_PROVIDER_CONFIG.write().unwrap().set_twitter_official_url(url);
+ let mut data_provider_config = DataProviderConfig::new();
+ data_provider_config.set_twitter_official_url(url);
+ data_provider_config
}
#[test]
fn query_tweet_work() {
- init();
+ let data_provider_config = init();
let tweet_id = "100";
- let mut client = TwitterOfficialClient::v2();
+ let mut client =
+ TwitterOfficialClient::v2(&data_provider_config.twitter_official_url, "token");
let result = client.query_tweet(tweet_id.as_bytes().to_vec());
assert!(result.is_ok(), "error: {:?}", result);
let tweet = result.unwrap();
@@ -292,9 +278,10 @@ mod tests {
#[test]
fn query_retweeted_work() {
- init();
+ let data_provider_config = init();
- let mut client = TwitterOfficialClient::v2();
+ let mut client =
+ TwitterOfficialClient::v2(&data_provider_config.twitter_official_url, "token");
let original_tweet_id = "100".as_bytes().to_vec();
let response = client.query_retweeted_by(original_tweet_id);
@@ -303,20 +290,22 @@ mod tests {
#[test]
fn query_user_by_name_work() {
- init();
+ let data_provider_config = init();
let user = "twitterdev";
- let mut client = TwitterOfficialClient::v2();
+ let mut client =
+ TwitterOfficialClient::v2(&data_provider_config.twitter_official_url, "token");
let result = client.query_user_by_name(user.as_bytes().to_vec());
assert!(result.is_ok(), "error: {:?}", result);
}
#[test]
fn query_user_by_id_work() {
- init();
+ let data_provider_config = init();
let user_id = "2244994945";
- let mut client = TwitterOfficialClient::v2();
+ let mut client =
+ TwitterOfficialClient::v2(&data_provider_config.twitter_official_url, "token");
let result = client.query_user_by_id(user_id.as_bytes().to_vec());
assert!(result.is_ok(), "error: {:?}", result);
}
diff --git a/tee-worker/litentry/core/identity-verification/src/lib.rs b/tee-worker/litentry/core/identity-verification/src/lib.rs
index d8749a6ed5..03692ebb67 100644
--- a/tee-worker/litentry/core/identity-verification/src/lib.rs
+++ b/tee-worker/litentry/core/identity-verification/src/lib.rs
@@ -40,7 +40,8 @@ mod web2;
mod error;
use error::{Error, Result};
+use lc_data_providers::DataProviderConfig;
-pub fn verify(r: &Web2IdentityVerificationRequest) -> Result<()> {
- web2::verify(&r.who, &r.identity, &r.raw_msg, &r.validation_data)
+pub fn verify(r: &Web2IdentityVerificationRequest, config: &DataProviderConfig) -> Result<()> {
+ web2::verify(&r.who, &r.identity, &r.raw_msg, &r.validation_data, config)
}
diff --git a/tee-worker/litentry/core/identity-verification/src/web2/mod.rs b/tee-worker/litentry/core/identity-verification/src/web2/mod.rs
index 540e6c5d1c..fa0faf933b 100644
--- a/tee-worker/litentry/core/identity-verification/src/web2/mod.rs
+++ b/tee-worker/litentry/core/identity-verification/src/web2/mod.rs
@@ -28,7 +28,7 @@ use itp_sgx_crypto::ShieldingCryptoDecrypt;
use lc_data_providers::{
discord_official::{DiscordMessage, DiscordOfficialClient},
twitter_official::{Tweet, TwitterOfficialClient},
- DataProviderConfigReader, ReadDataProviderConfig, UserInfo,
+ DataProviderConfig, UserInfo,
};
use litentry_primitives::{
DiscordValidationData, ErrorDetail, Identity, IntoErrorDetail, TwitterValidationData,
@@ -57,12 +57,16 @@ pub fn verify(
identity: &Identity,
raw_msg: &[u8],
data: &Web2ValidationData,
+ config: &DataProviderConfig,
) -> Result<()> {
debug!("verify web2 identity, who: {:?}", who);
let (user_name, payload) = match data {
Web2ValidationData::Twitter(TwitterValidationData { ref tweet_id }) => {
- let mut client = TwitterOfficialClient::v2();
+ let mut client = TwitterOfficialClient::v2(
+ config.twitter_official_url.as_str(),
+ config.twitter_auth_token_v2.as_str(),
+ );
let tweet: Tweet = client
.query_tweet(tweet_id.to_vec())
.map_err(|e| Error::LinkIdentityFailed(e.into_error_detail()))?;
@@ -84,10 +88,7 @@ pub fn verify(
ref message_id,
..
}) => {
- let data_provider_config =
- DataProviderConfigReader::read().map_err(Error::UnclassifiedError)?;
-
- let mut client = DiscordOfficialClient::new(&data_provider_config);
+ let mut client = DiscordOfficialClient::new(config);
let message: DiscordMessage = client
.query_message(channel_id.to_vec(), message_id.to_vec())
.map_err(|e| Error::LinkIdentityFailed(e.into_error_detail()))?;
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 58a69f5697..a41eae52e0 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
@@ -19,35 +19,40 @@
use crate::{handler::TaskHandler, EnclaveOnChainOCallApi, StfTaskContext, TrustedCall, H256};
use ita_sgx_runtime::Hash;
use ita_stf::{Getter, TrustedCallSigned};
-use itp_sgx_crypto::{ShieldingCryptoDecrypt, ShieldingCryptoEncrypt};
+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 lc_data_providers::{DataProviderConfigReader, ReadDataProviderConfig};
+use lc_data_providers::DataProviderConfig;
use lc_stf_task_sender::AssertionBuildRequest;
use litentry_primitives::{
AmountHoldingTimeType, Assertion, ErrorDetail, ErrorString, Identity, ParameterString,
VCMPError,
};
use log::*;
-use std::{format, sync::Arc, vec::Vec};
+use std::{format, string::ToString, sync::Arc, vec::Vec};
pub(crate) struct AssertionHandler<
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
O: EnclaveOnChainOCallApi,
-> {
+> where
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType: ShieldingCryptoEncrypt + 'static,
+{
pub(crate) req: AssertionBuildRequest,
- pub(crate) context: Arc>,
+ pub(crate) context: Arc>,
}
-impl TaskHandler for AssertionHandler
+impl TaskHandler
+ for AssertionHandler
where
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType: ShieldingCryptoEncrypt + 'static,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
@@ -68,72 +73,125 @@ where
}
lc_assertion_build::a1::build(&self.req)
},
- Assertion::A2(guild_id) => lc_assertion_build::a2::build(&self.req, guild_id),
-
- Assertion::A3(guild_id, channel_id, role_id) =>
- lc_assertion_build::a3::build(&self.req, guild_id, channel_id, role_id),
-
- Assertion::A4(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::LIT, min_balance),
-
- Assertion::A6 => lc_assertion_build::a6::build(&self.req),
-
- Assertion::A7(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::DOT, min_balance),
+ Assertion::A2(guild_id) => lc_assertion_build::a2::build(
+ &self.req,
+ guild_id,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A3(guild_id, channel_id, role_id) => lc_assertion_build::a3::build(
+ &self.req,
+ guild_id,
+ channel_id,
+ role_id,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A4(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::LIT,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A6 =>
+ lc_assertion_build::a6::build(&self.req, &self.context.data_provider_config),
+
+ Assertion::A7(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::DOT,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
// no need to pass `networks` again because it's the same as the `get_supported_web3networks`
- Assertion::A8(_networks) => lc_assertion_build::a8::build(&self.req),
-
- Assertion::A10(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::WBTC, min_balance),
-
- Assertion::A11(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::ETH, min_balance),
+ Assertion::A8(_networks) =>
+ lc_assertion_build::a8::build(&self.req, &self.context.data_provider_config),
+
+ Assertion::A10(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::WBTC,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A11(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::ETH,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
Assertion::A13(owner) =>
lc_assertion_build::a13::build(&self.req, self.context.ocall_api.clone(), &owner),
- Assertion::A14 => lc_assertion_build::a14::build(&self.req),
+ Assertion::A14 =>
+ lc_assertion_build::a14::build(&self.req, &self.context.data_provider_config),
- Assertion::Achainable(param) => lc_assertion_build::achainable::build(&self.req, param),
+ Assertion::Achainable(param) => lc_assertion_build::achainable::build(
+ &self.req,
+ param,
+ &self.context.data_provider_config,
+ ),
Assertion::A20 => lc_assertion_build::a20::build(&self.req),
- Assertion::Oneblock(course_type) =>
- lc_assertion_build::oneblock::course::build(&self.req, course_type),
+ Assertion::Oneblock(course_type) => lc_assertion_build::oneblock::course::build(
+ &self.req,
+ course_type,
+ &self.context.data_provider_config,
+ ),
Assertion::GenericDiscordRole(role_type) =>
- lc_assertion_build::generic_discord_role::build(&self.req, role_type),
+ lc_assertion_build::generic_discord_role::build(
+ &self.req,
+ role_type,
+ &self.context.data_provider_config,
+ ),
Assertion::BnbDomainHolding =>
lc_assertion_build::nodereal::bnb_domain::bnb_domain_holding_amount::build(
&self.req,
+ &self.context.data_provider_config,
),
Assertion::BnbDigitDomainClub(digit_domain_type) =>
lc_assertion_build::nodereal::bnb_domain::bnb_digit_domain_club_amount::build(
&self.req,
digit_domain_type,
+ &self.context.data_provider_config,
),
- Assertion::VIP3MembershipCard(level) =>
- lc_assertion_build::vip3::card::build(&self.req, level),
+ Assertion::VIP3MembershipCard(level) => lc_assertion_build::vip3::card::build(
+ &self.req,
+ level,
+ &self.context.data_provider_config,
+ ),
Assertion::WeirdoGhostGangHolder =>
- lc_assertion_build::nodereal::nft_holder::weirdo_ghost_gang_holder::build(&self.req),
+ lc_assertion_build::nodereal::nft_holder::weirdo_ghost_gang_holder::build(
+ &self.req,
+ &self.context.data_provider_config,
+ ),
Assertion::LITStaking => lc_assertion_build::lit_staking::build(&self.req),
Assertion::EVMAmountHolding(token_type) =>
lc_assertion_build::nodereal::amount_holding::evm_amount_holding::build(
- &self.req, token_type,
+ &self.req,
+ token_type,
+ &self.context.data_provider_config,
),
- Assertion::BRC20AmountHolder =>
- lc_assertion_build::brc20::amount_holder::build(&self.req),
+ Assertion::BRC20AmountHolder => lc_assertion_build::brc20::amount_holder::build(
+ &self.req,
+ &self.context.data_provider_config,
+ ),
- Assertion::CryptoSummary =>
- lc_assertion_build::nodereal::crypto_summary::build(&self.req),
+ Assertion::CryptoSummary => lc_assertion_build::nodereal::crypto_summary::build(
+ &self.req,
+ &self.context.data_provider_config,
+ ),
}?;
// post-process the credential
@@ -148,9 +206,8 @@ where
credential.parachain_block_number = self.req.parachain_block_number;
credential.sidechain_block_number = self.req.sidechain_block_number;
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| VCMPError::RequestVCFailed(self.req.assertion.clone(), e))?;
- credential.credential_subject.endpoint = data_provider_config.credential_endpoint;
+ credential.credential_subject.endpoint =
+ self.context.data_provider_config.credential_endpoint.to_string();
credential.credential_subject.assertion_text = format!("{:?}", self.req.assertion);
@@ -241,6 +298,7 @@ fn build_holding_time(
req: &AssertionBuildRequest,
htype: AmountHoldingTimeType,
min_balance: ParameterString,
+ data_provider_config: &DataProviderConfig,
) -> Result {
- lc_assertion_build::holding_time::build(req, htype, min_balance)
+ lc_assertion_build::holding_time::build(req, htype, min_balance, data_provider_config)
}
diff --git a/tee-worker/litentry/core/stf-task/receiver/src/handler/identity_verification.rs b/tee-worker/litentry/core/stf-task/receiver/src/handler/identity_verification.rs
index 033cf30b09..ecfd9fe3e8 100644
--- a/tee-worker/litentry/core/stf-task/receiver/src/handler/identity_verification.rs
+++ b/tee-worker/litentry/core/stf-task/receiver/src/handler/identity_verification.rs
@@ -20,7 +20,7 @@ use crate::{
};
use ita_sgx_runtime::Hash;
use ita_stf::H256;
-use itp_sgx_crypto::{ShieldingCryptoDecrypt, ShieldingCryptoEncrypt};
+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;
@@ -32,19 +32,24 @@ use log::*;
use std::sync::Arc;
pub(crate) struct IdentityVerificationHandler<
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
O: EnclaveOnChainOCallApi,
-> {
+> where
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType: ShieldingCryptoEncrypt + 'static,
+{
pub(crate) req: Web2IdentityVerificationRequest,
- pub(crate) context: Arc>,
+ pub(crate) context: Arc>,
}
-impl TaskHandler for IdentityVerificationHandler
+impl TaskHandler
+ for IdentityVerificationHandler
where
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType: ShieldingCryptoEncrypt + 'static,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
@@ -55,7 +60,7 @@ where
type Result = ();
fn on_process(&self) -> Result {
- lc_identity_verification::verify(&self.req)
+ lc_identity_verification::verify(&self.req, &self.context.data_provider_config)
}
fn on_success(
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 44e0f77de2..b83033ea38 100644
--- a/tee-worker/litentry/core/stf-task/receiver/src/lib.rs
+++ b/tee-worker/litentry/core/stf-task/receiver/src/lib.rs
@@ -47,12 +47,13 @@ use ita_sgx_runtime::Hash;
use ita_stf::{Getter, TrustedCall, TrustedCallSigned, TrustedOperation};
use itp_enclave_metrics::EnclaveMetric;
use itp_ocall_api::{EnclaveMetricsOCallApi, EnclaveOnChainOCallApi};
-use itp_sgx_crypto::{ShieldingCryptoDecrypt, ShieldingCryptoEncrypt};
+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::{RsaRequest, ShardIdentifier, H256};
+use lc_data_providers::DataProviderConfig;
use lc_stf_task_sender::{stf_task_sender, RequestType};
use log::{debug, error, info};
use std::{
@@ -83,37 +84,51 @@ pub enum Error {
#[allow(dead_code)]
pub struct StfTaskContext<
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
O: EnclaveOnChainOCallApi,
-> {
- pub shielding_key: K,
+> where
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType: ShieldingCryptoEncrypt + 'static,
+{
+ pub shielding_key: Arc,
author_api: Arc,
pub enclave_signer: Arc,
pub state_handler: Arc,
pub ocall_api: Arc,
+ pub data_provider_config: Arc,
}
impl<
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
O: EnclaveOnChainOCallApi,
- > StfTaskContext
+ > StfTaskContext
where
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType: ShieldingCryptoEncrypt + 'static,
H::StateT: SgxExternalitiesTrait,
{
pub fn new(
- shielding_key: K,
+ shielding_key: Arc,
author_api: Arc,
enclave_signer: Arc,
state_handler: Arc,
ocall_api: Arc,
+ data_provider_config: Arc,
) -> Self {
- Self { shielding_key, author_api, enclave_signer, state_handler, ocall_api }
+ Self {
+ shielding_key,
+ author_api,
+ enclave_signer,
+ state_handler,
+ ocall_api,
+ data_provider_config,
+ }
}
fn submit_trusted_call(
@@ -156,8 +171,12 @@ where
// the right channel
self.author_api.swap_rpc_connection_hash(*old_top_hash, top.hash());
- let encrypted_trusted_call = self
+ let shielding_key = self
.shielding_key
+ .retrieve_key()
+ .map_err(|e| Error::OtherError(format!("{:?}", e)))?;
+
+ let encrypted_trusted_call = shielding_key
.encrypt(&top.encode())
.map_err(|e| Error::OtherError(format!("{:?}", e)))?;
@@ -179,11 +198,12 @@ where
}
// lifetime elision: StfTaskContext is guaranteed to outlive the fn
-pub fn run_stf_task_receiver(
- context: Arc>,
+pub fn run_stf_task_receiver(
+ context: Arc>,
) -> Result<(), Error>
where
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone + Send + Sync + 'static,
+ ShieldingKeyRepository: AccessKey + Sync + Send + 'static,
+ ::KeyType: ShieldingCryptoEncrypt,
A: AuthorApi + Send + Sync + 'static,
S: StfEnclaveSigning + Send + Sync + 'static,
H: HandleState + Send + Sync + 'static,
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 87e7a1c115..61a9048590 100644
--- a/tee-worker/litentry/core/stf-task/receiver/src/test.rs
+++ b/tee-worker/litentry/core/stf-task/receiver/src/test.rs
@@ -3,6 +3,7 @@ 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,
@@ -15,16 +16,19 @@ use litentry_primitives::Assertion;
#[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 handle_state_mock = HandleStateMock::default();
let onchain_mock = OnchainMock::default();
+ let data_provider_conifg = DataProviderConfig::new();
let context = StfTaskContext::new(
- shielding_key.clone(),
+ Arc::new(shielding_key_repository_mock),
author_mock.into(),
stf_enclave_signer_mock.into(),
handle_state_mock.into(),
onchain_mock.into(),
+ data_provider_conifg.into(),
);
let _handle = std::thread::spawn(move || {
run_stf_task_receiver(Arc::new(context)).unwrap();
diff --git a/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/Cargo.toml b/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/Cargo.toml
index de66eb7b43..39a5a0c0cc 100644
--- a/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/Cargo.toml
+++ b/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/Cargo.toml
@@ -8,20 +8,16 @@ edition = "2021"
[dependencies]
# std dependencies
futures = { version = "0.3.8", optional = true }
-thiserror = { version = "1.0.26", optional = true }
threadpool = { version = "1.8.0", optional = true }
# sgx dependencies
futures_sgx = { package = "futures", git = "https://github.com/mesalock-linux/futures-rs-sgx", optional = true }
hex-sgx = { package = "hex", git = "https://github.com/mesalock-linux/rust-hex-sgx", tag = "sgx_1.1.3", features = ["sgx_tstd"], optional = true }
sgx_tstd = { git = "https://github.com/apache/teaclave-sgx-sdk.git", branch = "master", features = ["net", "thread"], optional = true }
-thiserror_sgx = { package = "thiserror", git = "https://github.com/mesalock-linux/thiserror-sgx", tag = "sgx_1.1.3", optional = true }
threadpool_sgx = { git = "https://github.com/mesalock-linux/rust-threadpool-sgx", package = "threadpool", tag = "sgx_1.1.3", optional = true }
-url_sgx = { package = "url", git = "https://github.com/mesalock-linux/rust-url-sgx", tag = "sgx_1.1.3", optional = true }
# no_std dependencies
codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
-lazy_static = { version = "1.1.0", features = ["spin_no_std"] }
log = { version = "0.4", default-features = false }
sp-core = { default-features = false, features = ["full_crypto"], git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" }
@@ -31,7 +27,6 @@ ita-stf = { path = "../../../../app-libs/stf", default-features = false }
itp-extrinsics-factory = { path = "../../../../core-primitives/extrinsics-factory", default-features = false }
itp-types = { path = "../../../../core-primitives/types", default-features = false }
-itp-enclave-metrics = { path = "../../../../core-primitives/enclave-metrics", default-features = false }
itp-node-api = { path = "../../../../core-primitives/node-api", default-features = false }
itp-ocall-api = { path = "../../../../core-primitives/ocall-api", default-features = false }
itp-sgx-crypto = { path = "../../../../core-primitives/sgx/crypto", default-features = false }
@@ -46,7 +41,6 @@ frame-support = { default-features = false, git = "https://github.com/paritytech
lc-assertion-build = { path = "../../assertion-build", default-features = false }
lc-credentials = { path = "../../credentials", default-features = false }
lc-data-providers = { path = "../../data-providers", default-features = false }
-lc-identity-verification = { path = "../../identity-verification", default-features = false }
lc-stf-task-receiver = { path = "../../stf-task/receiver", default-features = false }
lc-stf-task-sender = { path = "../../stf-task/sender", default-features = false }
lc-vc-task-sender = { path = "../lc-vc-task-sender", default-features = false }
@@ -60,8 +54,6 @@ sgx = [
"futures_sgx",
"hex-sgx",
"sgx_tstd",
- "thiserror_sgx",
- "url_sgx",
"ita-stf/sgx",
"itp-sgx-externalities/sgx",
"itp-stf-executor/sgx",
@@ -69,7 +61,6 @@ sgx = [
"itp-top-pool-author/sgx",
"sp-core/full_crypto",
"litentry-primitives/sgx",
- "lc-identity-verification/sgx",
"lc-assertion-build/sgx",
"lc-credentials/sgx",
"lc-data-providers/sgx",
@@ -84,14 +75,12 @@ std = [
"threadpool",
"futures",
"log/std",
- "thiserror",
"itp-types/std",
"itp-top-pool-author/std",
"itp-stf-executor/std",
"itp-stf-state-handler/std",
"sp-core/std",
"litentry-primitives/std",
- "lc-identity-verification/std",
"lc-assertion-build/std",
"ita-sgx-runtime/std",
"frame-support/std",
diff --git a/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/lib.rs b/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/lib.rs
index bda9c702eb..653ca79a8d 100644
--- a/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/lib.rs
+++ b/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/lib.rs
@@ -8,9 +8,7 @@ extern crate sgx_tstd as std;
pub mod sgx_reexport_prelude {
pub use futures_sgx as futures;
pub use hex_sgx as hex;
- pub use thiserror_sgx as thiserror;
pub use threadpool_sgx as threadpool;
- pub use url_sgx as url;
}
#[cfg(all(feature = "std", feature = "sgx"))]
@@ -33,7 +31,7 @@ use itp_node_api::metadata::{
pallet_vcmp::VCMPCallIndexes, provider::AccessNodeMetadata, NodeMetadataTrait,
};
use itp_ocall_api::{EnclaveMetricsOCallApi, EnclaveOnChainOCallApi};
-use itp_sgx_crypto::{ShieldingCryptoDecrypt, ShieldingCryptoEncrypt};
+use itp_sgx_crypto::{key_repository::AccessKey, ShieldingCryptoDecrypt, ShieldingCryptoEncrypt};
use itp_sgx_externalities::SgxExternalitiesTrait;
use itp_stf_executor::traits::StfEnclaveSigning;
use itp_stf_state_handler::handle_state::HandleState;
@@ -58,12 +56,14 @@ use threadpool::ThreadPool;
mod vc_handling;
-pub fn run_vc_handler_runner(
- context: Arc>,
+pub fn run_vc_handler_runner(
+ context: Arc>,
extrinsic_factory: Arc,
node_metadata_repo: Arc,
) where
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone + Send + Sync + 'static,
+ ShieldingKeyRepository: AccessKey + Send + Sync + 'static,
+ ::KeyType:
+ ShieldingCryptoEncrypt + ShieldingCryptoDecrypt + 'static,
A: AuthorApi + Send + Sync + 'static,
S: StfEnclaveSigning + Send + Sync + 'static,
H: HandleState + Send + Sync + 'static,
@@ -96,16 +96,18 @@ pub fn run_vc_handler_runner(
}
}
-pub fn handle_request(
+pub fn handle_request(
key: Vec,
mut encrypted_trusted_call: AesOutput,
shard: ShardIdentifier,
- context: Arc>,
+ context: Arc>,
extrinsic_factory: Arc,
node_metadata_repo: Arc,
) -> Result, String>
where
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone + Send + Sync + 'static,
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType:
+ ShieldingCryptoEncrypt + ShieldingCryptoDecrypt + 'static,
A: AuthorApi + Send + Sync + 'static,
S: StfEnclaveSigning + Send + Sync + 'static,
H: HandleState + Send + Sync + 'static,
@@ -115,8 +117,12 @@ where
N: AccessNodeMetadata + Send + Sync + 'static,
N::MetadataType: NodeMetadataTrait,
{
- let aes_key: RequestAesKey = context
+ let shielding_key = context
.shielding_key
+ .retrieve_key()
+ .map_err(|e| format!("Failed to retrieve shielding key: {:?}", e))?;
+
+ let aes_key: RequestAesKey = shielding_key
.decrypt(&key)
.map_err(|e| format!("Failed to decrypted AES Key: {:?}", e))?
.try_into()
diff --git a/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/vc_handling.rs b/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/vc_handling.rs
index ed16501cb0..33d6cc1ab6 100644
--- a/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/vc_handling.rs
+++ b/tee-worker/litentry/core/vc-issuance/lc-vc-task-receiver/src/vc_handling.rs
@@ -4,12 +4,12 @@ use crate::{Getter, TrustedCallSigned};
use ita_sgx_runtime::Hash;
pub use ita_stf::aes_encrypt_default;
use itp_ocall_api::EnclaveOnChainOCallApi;
-use itp_sgx_crypto::{ShieldingCryptoDecrypt, ShieldingCryptoEncrypt};
+use itp_sgx_crypto::{key_repository::AccessKey, ShieldingCryptoDecrypt, 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 lc_data_providers::{DataProviderConfigReader, ReadDataProviderConfig};
+use lc_data_providers::DataProviderConfig;
use lc_stf_task_receiver::StfTaskContext;
use lc_stf_task_sender::AssertionBuildRequest;
use lc_vc_task_sender::VCResponse;
@@ -17,22 +17,28 @@ use litentry_primitives::{
AmountHoldingTimeType, Assertion, ErrorDetail, ErrorString, Identity, ParameterString,
VCMPError,
};
-use std::{format, sync::Arc};
+use std::{format, string::ToString, sync::Arc};
pub(crate) struct VCRequestHandler<
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
O: EnclaveOnChainOCallApi,
-> {
+> where
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType:
+ ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + 'static,
+{
pub(crate) req: AssertionBuildRequest,
- pub(crate) context: Arc>,
+ pub(crate) context: Arc>,
}
-impl VCRequestHandler
+impl VCRequestHandler
where
- K: ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + Clone,
+ ShieldingKeyRepository: AccessKey,
+ ::KeyType:
+ ShieldingCryptoDecrypt + ShieldingCryptoEncrypt + 'static,
A: AuthorApi,
S: StfEnclaveSigning,
H: HandleState,
@@ -43,72 +49,125 @@ where
let mut credential = match self.req.assertion.clone() {
Assertion::A1 => lc_assertion_build::a1::build(&self.req),
- Assertion::A2(guild_id) => lc_assertion_build::a2::build(&self.req, guild_id),
-
- Assertion::A3(guild_id, channel_id, role_id) =>
- lc_assertion_build::a3::build(&self.req, guild_id, channel_id, role_id),
-
- Assertion::A4(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::LIT, min_balance),
-
- Assertion::A6 => lc_assertion_build::a6::build(&self.req),
-
- Assertion::A7(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::DOT, min_balance),
+ Assertion::A2(guild_id) => lc_assertion_build::a2::build(
+ &self.req,
+ guild_id,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A3(guild_id, channel_id, role_id) => lc_assertion_build::a3::build(
+ &self.req,
+ guild_id,
+ channel_id,
+ role_id,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A4(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::LIT,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A6 =>
+ lc_assertion_build::a6::build(&self.req, &self.context.data_provider_config),
+
+ Assertion::A7(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::DOT,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
// no need to pass `networks` again because it's the same as the `get_supported_web3networks`
- Assertion::A8(_networks) => lc_assertion_build::a8::build(&self.req),
-
- Assertion::A10(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::WBTC, min_balance),
-
- Assertion::A11(min_balance) =>
- build_holding_time(&self.req, AmountHoldingTimeType::ETH, min_balance),
+ Assertion::A8(_networks) =>
+ lc_assertion_build::a8::build(&self.req, &self.context.data_provider_config),
+
+ Assertion::A10(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::WBTC,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
+
+ Assertion::A11(min_balance) => build_holding_time(
+ &self.req,
+ AmountHoldingTimeType::ETH,
+ min_balance,
+ &self.context.data_provider_config,
+ ),
Assertion::A13(owner) =>
lc_assertion_build::a13::build(&self.req, self.context.ocall_api.clone(), &owner),
- Assertion::A14 => lc_assertion_build::a14::build(&self.req),
+ Assertion::A14 =>
+ lc_assertion_build::a14::build(&self.req, &self.context.data_provider_config),
- Assertion::Achainable(param) => lc_assertion_build::achainable::build(&self.req, param),
+ Assertion::Achainable(param) => lc_assertion_build::achainable::build(
+ &self.req,
+ param,
+ &self.context.data_provider_config,
+ ),
Assertion::A20 => lc_assertion_build::a20::build(&self.req),
- Assertion::Oneblock(course_type) =>
- lc_assertion_build::oneblock::course::build(&self.req, course_type),
+ Assertion::Oneblock(course_type) => lc_assertion_build::oneblock::course::build(
+ &self.req,
+ course_type,
+ &self.context.data_provider_config,
+ ),
Assertion::GenericDiscordRole(role_type) =>
- lc_assertion_build::generic_discord_role::build(&self.req, role_type),
+ lc_assertion_build::generic_discord_role::build(
+ &self.req,
+ role_type,
+ &self.context.data_provider_config,
+ ),
Assertion::BnbDomainHolding =>
lc_assertion_build::nodereal::bnb_domain::bnb_domain_holding_amount::build(
&self.req,
+ &self.context.data_provider_config,
),
Assertion::BnbDigitDomainClub(digit_domain_type) =>
lc_assertion_build::nodereal::bnb_domain::bnb_digit_domain_club_amount::build(
&self.req,
digit_domain_type,
+ &self.context.data_provider_config,
),
- Assertion::VIP3MembershipCard(level) =>
- lc_assertion_build::vip3::card::build(&self.req, level),
+ Assertion::VIP3MembershipCard(level) => lc_assertion_build::vip3::card::build(
+ &self.req,
+ level,
+ &self.context.data_provider_config,
+ ),
Assertion::WeirdoGhostGangHolder =>
- lc_assertion_build::nodereal::nft_holder::weirdo_ghost_gang_holder::build(&self.req),
+ lc_assertion_build::nodereal::nft_holder::weirdo_ghost_gang_holder::build(
+ &self.req,
+ &self.context.data_provider_config,
+ ),
Assertion::LITStaking => lc_assertion_build::lit_staking::build(&self.req),
Assertion::EVMAmountHolding(token_type) =>
lc_assertion_build::nodereal::amount_holding::evm_amount_holding::build(
- &self.req, token_type,
+ &self.req,
+ token_type,
+ &self.context.data_provider_config,
),
- Assertion::BRC20AmountHolder =>
- lc_assertion_build::brc20::amount_holder::build(&self.req),
+ Assertion::BRC20AmountHolder => lc_assertion_build::brc20::amount_holder::build(
+ &self.req,
+ &self.context.data_provider_config,
+ ),
- Assertion::CryptoSummary =>
- lc_assertion_build::nodereal::crypto_summary::build(&self.req),
+ Assertion::CryptoSummary => lc_assertion_build::nodereal::crypto_summary::build(
+ &self.req,
+ &self.context.data_provider_config,
+ ),
}?;
// post-process the credential
@@ -120,9 +179,8 @@ where
)
})?;
- let data_provider_config = DataProviderConfigReader::read()
- .map_err(|e| VCMPError::RequestVCFailed(self.req.assertion.clone(), e))?;
- credential.credential_subject.endpoint = data_provider_config.credential_endpoint;
+ credential.credential_subject.endpoint =
+ self.context.data_provider_config.credential_endpoint.to_string();
credential.issuer.id =
Identity::Substrate(enclave_account.into()).to_did().map_err(|e| {
@@ -167,6 +225,7 @@ fn build_holding_time(
req: &AssertionBuildRequest,
htype: AmountHoldingTimeType,
min_balance: ParameterString,
+ data_provider_config: &DataProviderConfig,
) -> Result {
- lc_assertion_build::holding_time::build(req, htype, min_balance)
+ lc_assertion_build::holding_time::build(req, htype, min_balance, data_provider_config)
}
diff --git a/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/Cargo.toml b/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/Cargo.toml
index 53c08394c1..69e6fe4e21 100644
--- a/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/Cargo.toml
+++ b/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/Cargo.toml
@@ -8,14 +8,10 @@ edition = "2021"
[dependencies]
# std dependencies
futures = { version = "0.3.8", optional = true }
-thiserror = { version = "1.0.26", optional = true }
-url = { version = "2.0.0", optional = true }
# sgx dependencies
futures_sgx = { package = "futures", git = "https://github.com/mesalock-linux/futures-rs-sgx", optional = true }
sgx_tstd = { branch = "master", git = "https://github.com/apache/teaclave-sgx-sdk.git", features = ["net", "thread"], optional = true }
-thiserror_sgx = { package = "thiserror", git = "https://github.com/mesalock-linux/thiserror-sgx", tag = "sgx_1.1.3", optional = true }
-url_sgx = { package = "url", git = "https://github.com/mesalock-linux/rust-url-sgx", tag = "sgx_1.1.3", optional = true }
# no_std dependencies
codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
@@ -30,7 +26,6 @@ sp-std = { git = "https://github.com/paritytech/substrate.git", branch = "polkad
itp-types = { path = "../../../../core-primitives/types", default-features = false }
# litentry
-itp-stf-primitives = { default-features = false, path = "../../../../core-primitives/stf-primitives" }
lc-stf-task-sender = { path = "../../stf-task/sender", default-features = false }
litentry-primitives = { path = "../../../primitives", default-features = false }
@@ -38,8 +33,6 @@ litentry-primitives = { path = "../../../primitives", default-features = false }
default = ["std"]
sgx = [
"sgx_tstd",
- "thiserror_sgx",
- "url_sgx",
"lc-stf-task-sender/sgx",
"futures_sgx",
]
@@ -47,8 +40,6 @@ std = [
"log/std",
"sp-runtime/std",
"sp-std/std",
- "thiserror",
- "url",
"itp-types/std",
"lc-stf-task-sender/std",
"futures",
diff --git a/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/src/lib.rs b/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/src/lib.rs
index 7721ecde09..a6d642b65f 100644
--- a/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/src/lib.rs
+++ b/tee-worker/litentry/core/vc-issuance/lc-vc-task-sender/src/lib.rs
@@ -11,8 +11,6 @@ extern crate sgx_tstd as std;
#[cfg(all(not(feature = "std"), feature = "sgx"))]
pub mod sgx_reexport_prelude {
pub use futures_sgx as futures;
- pub use thiserror_sgx as thiserror;
- pub use url_sgx as url;
}
#[cfg(all(not(feature = "std"), feature = "sgx"))]
diff --git a/tee-worker/local-setup/config/one-worker.json b/tee-worker/local-setup/config/one-worker.json
index 92bd62c04e..8e208e1849 100644
--- a/tee-worker/local-setup/config/one-worker.json
+++ b/tee-worker/local-setup/config/one-worker.json
@@ -34,8 +34,6 @@
"-h",
"4545",
"--ws-external",
- "--running-mode",
- "mock",
"--enable-mock-server",
"--parentchain-start-block",
"0",
diff --git a/tee-worker/local-setup/config/three-workers.json b/tee-worker/local-setup/config/three-workers.json
index 8f1949ef44..d31faa7cd9 100644
--- a/tee-worker/local-setup/config/three-workers.json
+++ b/tee-worker/local-setup/config/three-workers.json
@@ -15,8 +15,6 @@
"3443",
"-h",
"4545",
- "--running-mode",
- "mock",
"--enable-mock-server",
"--parentchain-start-block",
"0",
@@ -42,8 +40,6 @@
"3453",
"-h",
"4555",
- "--running-mode",
- "mock",
"--enable-mock-server",
"--parentchain-start-block",
"0"
@@ -69,8 +65,6 @@
"3463",
"-h",
"4565",
- "--running-mode",
- "mock",
"--enable-mock-server",
"--parentchain-start-block",
"0"
diff --git a/tee-worker/local-setup/config/two-workers.json b/tee-worker/local-setup/config/two-workers.json
index 212b5e3ddc..2ed4f08d17 100644
--- a/tee-worker/local-setup/config/two-workers.json
+++ b/tee-worker/local-setup/config/two-workers.json
@@ -34,8 +34,6 @@
"-h",
"4545",
"--ws-external",
- "--running-mode",
- "mock",
"--enable-mock-server",
"--parentchain-start-block",
"0",
@@ -63,8 +61,6 @@
"-h",
"4546",
"--ws-external",
- "--running-mode",
- "mock",
"--enable-mock-server",
"--parentchain-start-block",
"0",
diff --git a/tee-worker/local-setup/development-worker.json b/tee-worker/local-setup/development-worker.json
index e27ae0da34..3aff16fc7a 100644
--- a/tee-worker/local-setup/development-worker.json
+++ b/tee-worker/local-setup/development-worker.json
@@ -15,8 +15,6 @@
"$UntrustedHttpPort",
"-p",
"$CollatorWSPort",
- "--running-mode",
- "mock",
"--enable-mock-server",
"--parentchain-start-block",
"0",
diff --git a/tee-worker/scripts/launch_local_worker.sh b/tee-worker/scripts/launch_local_worker.sh
index 4fd4d40bbe..31e9c61873 100755
--- a/tee-worker/scripts/launch_local_worker.sh
+++ b/tee-worker/scripts/launch_local_worker.sh
@@ -27,8 +27,6 @@ WORKER_NUM=${worker_num:-1}
NODE_URL=${node_url:-"ws://127.0.0.1"} # "ws://host.docker.internal"
NODE_PORT=${node_port:-"9944"} # "9946"
-RUNNING_MODE=${mode:-"mock"}
-
# Fixed values:
WORKER_ENDPOINT="localhost"
MU_RA_PORT="3443"
@@ -130,7 +128,6 @@ for ((i = 0; i < ${WORKER_NUM}; i++)); do
--untrusted-external-address ws://${WORKER_ENDPOINT} \
--untrusted-http-port ${untrusted_http_port} \
--untrusted-worker-port ${untrusted_worker_port} \
---running-mode ${RUNNING_MODE} ${MOCK_SERVER} \
run --skip-ra ${FSUBCMD_DEV} ${FSUBCMD_REQ_STATE}"
echo "${worker_name} command: ${launch_command}"
diff --git a/tee-worker/scripts/litentry/release/ReadMe.md b/tee-worker/scripts/litentry/release/ReadMe.md
index 7a4cbfa22a..59f516c258 100644
--- a/tee-worker/scripts/litentry/release/ReadMe.md
+++ b/tee-worker/scripts/litentry/release/ReadMe.md
@@ -45,7 +45,7 @@ Before starting the workers, please make sure the target parachain is already up
The service will start up like this example:
```
- RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug ./litentry-worker --clean-reset --ws-external --mu-ra-external-address localhost --mu-ra-port 3443 --node-port 9944 --node-url ws://127.0.0.1 --trusted-external-address wss://localhost --trusted-worker-port 2000 --untrusted-external-address ws://localhost --untrusted-http-port 4545 --untrusted-worker-port 3000 --running-mode dev --enable-mock-server run --skip-ra --dev
+ RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug ./litentry-worker --clean-reset --ws-external --mu-ra-external-address localhost --mu-ra-port 3443 --node-port 9944 --node-url ws://127.0.0.1 --trusted-external-address wss://localhost --trusted-worker-port 2000 --untrusted-external-address ws://localhost --untrusted-http-port 4545 --untrusted-worker-port 3000 --enable-mock-server run --skip-ra --dev
```
The first part is RUST_LOG info. In production env, most of them will be disabled. Or `RUST_LOG=info` is enough.
@@ -81,9 +81,6 @@ Before starting the workers, please make sure the target parachain is already up
-u, --node-url
Set the node server protocol and IP address [default: ws://127.0.0.1]
- --running-mode
- Litentry TEE service running mode [default: dev]
-
-T, --trusted-external-address
Set the trusted worker address to be advertised on the parentchain. If no port is given, the same as in
`trusted-worker-port` will be used.
diff --git a/tee-worker/service/Cargo.toml b/tee-worker/service/Cargo.toml
index f7f0e2e353..c751b43e50 100644
--- a/tee-worker/service/Cargo.toml
+++ b/tee-worker/service/Cargo.toml
@@ -70,6 +70,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate.git", branch = "po
# litentry
config = "0.13.3"
+ita-stf = { path = "../app-libs/stf", default-features = false }
lc-data-providers = { path = "../litentry/core/data-providers" }
lc-mock-server = { path = "../litentry/core/mock-server" }
lc-stf-task-sender = { path = "../litentry/core/stf-task/sender", default-features = false }
diff --git a/tee-worker/service/src/cli.yml b/tee-worker/service/src/cli.yml
index a26232c5ba..db53ab0174 100644
--- a/tee-worker/service/src/cli.yml
+++ b/tee-worker/service/src/cli.yml
@@ -108,11 +108,6 @@ args:
long: clean-reset
short: c
help: Cleans and purges any previous state and key files and generates them anew before starting.
- - running-mode:
- long: running-mode
- help: Litentry TEE service running mode
- takes_value: true
- default_value: "dev"
- enable-mock-server:
long: enable-mock-server
takes_value: false
diff --git a/tee-worker/service/src/config.rs b/tee-worker/service/src/config.rs
index 68fb269657..5c7b569d21 100644
--- a/tee-worker/service/src/config.rs
+++ b/tee-worker/service/src/config.rs
@@ -33,7 +33,6 @@ static DEFAULT_UNTRUSTED_PORT: &str = "2001";
static DEFAULT_MU_RA_PORT: &str = "3443";
static DEFAULT_METRICS_PORT: &str = "8787";
static DEFAULT_UNTRUSTED_HTTP_PORT: &str = "4545";
-static DEFAULT_RUNNING_MODE: &str = "dev";
static DEFAULT_MOCK_SERVER_PORT: &str = "19527";
static DEFAULT_PARENTCHAIN_START_BLOCK: &str = "0";
static DEFAULT_FAIL_AT: &str = "0";
@@ -70,9 +69,6 @@ pub struct Config {
/// Config of the 'run' subcommand
pub run_config: Option,
- /// Litentry
- /// running mode that determins the config: dev/staging/prod/mock
- pub running_mode: String,
/// whether to enable the HTTP mock server for testing
pub enable_mock_server: bool,
/// the mock server port
@@ -106,7 +102,6 @@ impl Config {
untrusted_http_port: String,
data_dir: PathBuf,
run_config: Option,
- running_mode: String,
enable_mock_server: bool,
mock_server_port: String,
parentchain_start_block: String,
@@ -132,7 +127,6 @@ impl Config {
untrusted_http_port,
data_dir,
run_config,
- running_mode,
enable_mock_server,
mock_server_port,
parentchain_start_block,
@@ -299,7 +293,6 @@ impl From<&ArgMatches<'_>> for Config {
untrusted_http_port.to_string(),
data_dir,
run_config,
- m.value_of("running-mode").unwrap_or(DEFAULT_RUNNING_MODE).to_string(),
is_mock_server_enabled,
mock_server_port.to_string(),
parentchain_start_block.to_string(),
@@ -446,7 +439,6 @@ mod test {
assert_eq!(config.untrusted_http_port, DEFAULT_UNTRUSTED_HTTP_PORT);
assert_eq!(config.data_dir, pwd());
assert!(config.run_config.is_none());
- assert_eq!(config.running_mode, DEFAULT_RUNNING_MODE);
assert_eq!(config.mock_server_port, DEFAULT_MOCK_SERVER_PORT);
assert_eq!(config.parentchain_start_block, DEFAULT_PARENTCHAIN_START_BLOCK);
assert_matches!(config.fail_slot_mode, Option::None);
@@ -476,8 +468,6 @@ mod test {
let mu_ra_port = "99";
let untrusted_http_port = "4321";
- // running mode for litentry: dev / staging / prod
- let running_mode = "dev";
let mock_server_port = "19527";
let parentchain_start_block = "30";
@@ -493,7 +483,6 @@ mod test {
("untrusted-worker-port", Default::default()),
("trusted-worker-port", Default::default()),
("untrusted-http-port", Default::default()),
- ("running-mode", Default::default()),
("mock-server-port", Default::default()),
("parentchain-start-block", Default::default()),
]);
@@ -508,7 +497,6 @@ mod test {
args.args.get_mut("untrusted-worker-port").unwrap().vals = vec![untrusted_port.into()];
args.args.get_mut("trusted-worker-port").unwrap().vals = vec![trusted_port.into()];
args.args.get_mut("untrusted-http-port").unwrap().vals = vec![untrusted_http_port.into()];
- args.args.get_mut("running-mode").unwrap().vals = vec![running_mode.into()];
args.args.get_mut("mock-server-port").unwrap().vals = vec![mock_server_port.into()];
args.args.get_mut("parentchain-start-block").unwrap().vals =
vec![parentchain_start_block.into()];
@@ -524,7 +512,6 @@ mod test {
assert_eq!(config.untrusted_external_worker_address, Some(untrusted_ext_addr.to_string()));
assert_eq!(config.mu_ra_external_address, Some(mu_ra_ext_addr.to_string()));
assert_eq!(config.untrusted_http_port, untrusted_http_port.to_string());
- assert_eq!(config.running_mode, running_mode.to_string());
assert_eq!(config.mock_server_port, mock_server_port.to_string());
assert_eq!(config.parentchain_start_block, parentchain_start_block.to_string());
}
diff --git a/tee-worker/service/src/main_impl.rs b/tee-worker/service/src/main_impl.rs
index 184b0b9921..a211d214f5 100644
--- a/tee-worker/service/src/main_impl.rs
+++ b/tee-worker/service/src/main_impl.rs
@@ -36,9 +36,7 @@ use itp_enclave_api::{
enclave_base::EnclaveBase,
remote_attestation::{RemoteAttestation, TlsRemoteAttestation},
sidechain::Sidechain,
- stf_task_handler::StfTaskHandler,
teeracle_api::TeeracleApi,
- vc_issuance::VcIssuance,
};
use itp_node_api::{
api_client::{AccountApi, PalletTeerexApi, ParentchainApi},
@@ -182,8 +180,6 @@ pub(crate) fn main() {
#[cfg(not(feature = "dcap"))]
let quote_size = None;
- let data_provider_config = get_data_provider_config(&config);
-
if let Some(run_config) = config.run_config() {
let shard = extract_shard(run_config.shard(), enclave.as_ref());
@@ -231,7 +227,6 @@ pub(crate) fn main() {
initialization_handler,
quoting_enclave_target_info,
quote_size,
- &data_provider_config,
);
} else if let Some(smatches) = matches.subcommand_matches("request-state") {
println!("*** Requesting state from a registered worker \n");
@@ -337,7 +332,6 @@ fn start_worker(
initialization_handler: Arc,
quoting_enclave_target_info: Option,
quote_size: Option,
- data_provider_config: &DataProviderConfig,
) where
T: GetTokioHandle,
E: EnclaveBase
@@ -346,8 +340,6 @@ fn start_worker(
+ RemoteAttestation
+ TlsRemoteAttestation
+ TeeracleApi
- + StfTaskHandler
- + VcIssuance
+ Clone,
D: BlockPruner + FetchBlocks + Sync + Send + 'static,
InitializationHandler: TrackInitialization + IsInitialized + Sync + Send + 'static,
@@ -611,24 +603,6 @@ fn start_worker(
initialization_handler.registered_on_parentchain();
- println!("[+] Starting stf task handler thread");
- // ------------------------------------------------------------------------
- // Start stf task handler thread
- let enclave_api_stf_task_handler = enclave.clone();
- let data_provider = data_provider_config.clone();
- thread::spawn(move || {
- enclave_api_stf_task_handler.run_stf_task_handler(data_provider).unwrap();
- });
-
- println!("[+] Starting VC issuance handler thread");
- // ------------------------------------------------------------------------
- // Start vc issuance handler thread
- let enclave_api_vc_task_handler = enclave.clone();
- let data_provider = data_provider_config.clone();
- thread::spawn(move || {
- enclave_api_vc_task_handler.run_vc_issuance(data_provider).unwrap();
- });
-
match WorkerModeProvider::worker_mode() {
WorkerMode::Teeracle => {
// ------------------------------------------------------------------------
@@ -1087,99 +1061,3 @@ fn we_are_primary_worker(
node_api.enclave_count(Some(*register_enclave_xt_header.parent_hash()))?;
Ok(enclave_count_of_previous_block == 0)
}
-
-fn get_data_provider_config(config: &Config) -> DataProviderConfig {
- let built_in_modes = vec!["dev", "staging", "prod", "mock"];
- let built_in_config: Value =
- serde_json::from_slice(include_bytes!("running-mode-config.json")).unwrap();
-
- let mut data_provider_config = if built_in_modes.contains(&config.running_mode.as_str()) {
- let config = built_in_config.get(config.running_mode.as_str()).unwrap();
- serde_json::from_value::(config.clone()).unwrap()
- } else {
- let file_path = config.running_mode.as_str();
- let mut file = File::open(file_path)
- .map_err(|e| format!("{:?}, file:{}", e, file_path))
- .unwrap();
- let mut data = String::new();
- file.read_to_string(&mut data).unwrap();
- serde_json::from_str::(data.as_str()).unwrap()
- };
- if let Ok(v) = env::var("TWITTER_OFFICIAL_URL") {
- data_provider_config.set_twitter_official_url(v);
- }
- if let Ok(v) = env::var("TWITTER_LITENTRY_URL") {
- data_provider_config.set_twitter_litentry_url(v);
- }
- // Bearer Token is as same as App only Access Token on Twitter (https://developer.twitter.com/en/docs/authentication/oauth-2-0/application-only),
- // that is for developers that just need read-only access to public information.
- if let Ok(v) = env::var("TWITTER_AUTH_TOKEN_V2") {
- data_provider_config.set_twitter_auth_token_v2(v);
- }
- if let Ok(v) = env::var("DISCORD_OFFICIAL_URL") {
- data_provider_config.set_discord_official_url(v);
- }
- if let Ok(v) = env::var("DISCORD_LITENTRY_URL") {
- data_provider_config.set_discord_litentry_url(v);
- }
- if let Ok(v) = env::var("DISCORD_AUTH_TOKEN") {
- data_provider_config.set_discord_auth_token(v);
- }
- if let Ok(v) = env::var("ACHAINABLE_URL") {
- data_provider_config.set_achainable_url(v);
- }
- if let Ok(v) = env::var("ACHAINABLE_AUTH_KEY") {
- data_provider_config.set_achainable_auth_key(v);
- }
- if let Ok(v) = env::var("CREDENTIAL_ENDPOINT") {
- data_provider_config.set_credential_endpoint(v);
- }
- if let Ok(v) = env::var("ONEBLOCK_NOTION_KEY") {
- data_provider_config.set_oneblock_notion_key(v);
- }
- if let Ok(v) = env::var("ONEBLOCK_NOTION_URL") {
- data_provider_config.set_oneblock_notion_url(v);
- }
- if let Ok(v) = env::var("SORA_QUIZ_MASTER_ID") {
- data_provider_config.set_sora_quiz_master_id(v);
- }
- if let Ok(v) = env::var("SORA_QUIZ_ATTENDEE_ID") {
- data_provider_config.set_sora_quiz_attendee_id(v);
- }
- if let Ok(v) = env::var("NODEREAL_API_KEY") {
- data_provider_config.set_nodereal_api_key(v);
- }
- if let Ok(v) = env::var("NODEREAL_API_RETRY_DELAY") {
- let value: u64 = v.parse().unwrap();
- data_provider_config.set_nodereal_api_retry_delay(value);
- }
- if let Ok(v) = env::var("NODEREAL_API_RETRY_TIMES") {
- let value: u16 = v.parse().unwrap();
- data_provider_config.set_nodereal_api_retry_times(value);
- }
- if let Ok(v) = env::var("NODEREAL_API_URL") {
- data_provider_config.set_nodereal_api_url(v);
- }
- if let Ok(v) = env::var("NODEREAL_API_CHAIN_NETWORK_URL") {
- data_provider_config.set_nodereal_api_chain_network_url(v);
- }
- if let Ok(v) = env::var("CONTEST_LEGEND_DISCORD_ROLE_ID") {
- data_provider_config.set_contest_legend_discord_role_id(v);
- }
- if let Ok(v) = env::var("CONTEST_POPULARITY_DISCORD_ROLE_ID") {
- data_provider_config.set_contest_popularity_discord_role_id(v);
- }
- if let Ok(v) = env::var("CONTEST_PARTICIPANT_DISCORD_ROLE_ID") {
- data_provider_config.set_contest_participant_discord_role_id(v);
- }
- if let Ok(v) = env::var("VIP3_URL") {
- data_provider_config.set_vip3_url(v);
- }
- if let Ok(v) = env::var("GENIIDATA_URL") {
- data_provider_config.set_geniidata_url(v);
- }
- if let Ok(v) = env::var("GENIIDATA_API_KEY") {
- data_provider_config.set_geniidata_api_key(v);
- }
- data_provider_config
-}
diff --git a/tee-worker/service/src/running-mode-config.json b/tee-worker/service/src/running-mode-config.json
deleted file mode 100644
index 117cd7e55c..0000000000
--- a/tee-worker/service/src/running-mode-config.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "dev": {
- "twitter_official_url": "https://api.twitter.com",
- "twitter_litentry_url": "http://54.255.182.249:9527",
- "twitter_auth_token_v2": "abcdefghijklmnopqrstuvwxyz",
- "discord_official_url": "https://discordapp.com",
- "discord_litentry_url": "http://54.255.182.249:9527",
- "discord_auth_token": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "achainable_url": "https://label-production.graph.tdf-labs.io",
- "achainable_auth_key": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "credential_endpoint": "http://localhost:9933",
- "oneblock_notion_key": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "oneblock_notion_url": "https://abc.com",
- "sora_quiz_master_id": "SORA_QUIZ_MASTER_ID",
- "sora_quiz_attendee_id": "SORA_QUIZ_ATTENDEE_ID",
- "nodereal_api_key": "NODEREAL_API_KEY",
- "nodereal_api_retry_delay": 5000,
- "nodereal_api_retry_times": 2,
- "nodereal_api_url": "https://open-platform.nodereal.io/",
- "nodereal_api_chain_network_url": "https://{chain}-mainnet.nodereal.io/",
- "contest_legend_discord_role_id": "CONTEST_LEGEND_DISCORD_ROLE_ID",
- "contest_popularity_discord_role_id": "CONTEST_POPULARITY_DISCORD_ROLE_ID",
- "contest_participant_discord_role_id": "CONTEST_PARTICIPANT_DISCORD_ROLE_ID",
- "vip3_url": "https://dappapi.vip3.io/",
- "geniidata_url": "https://api.geniidata.com/api/1/brc20/balance?",
- "geniidata_api_key": "142cf1b0-1ca7-11ee-bb5e-9d74c2e854ac"
- },
- "mock": {
- "twitter_official_url": "http://localhost:19527",
- "twitter_litentry_url": "http://localhost:19527",
- "twitter_auth_token_v2": "",
- "discord_official_url": "http://localhost:19527",
- "discord_litentry_url": "http://localhost:19527",
- "discord_auth_token": "",
- "achainable_url": "http://localhost:19527",
- "achainable_auth_key": "",
- "credential_endpoint": "http://localhost:9933",
- "oneblock_notion_key": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "oneblock_notion_url": "https://abc.com",
- "sora_quiz_master_id": "SORA_QUIZ_MASTER_ID",
- "sora_quiz_attendee_id": "SORA_QUIZ_ATTENDEE_ID",
- "nodereal_api_key": "NODEREAL_API_KEY",
- "nodereal_api_retry_delay": 5000,
- "nodereal_api_retry_times": 2,
- "nodereal_api_url": "https://open-platform.nodereal.io/",
- "nodereal_api_chain_network_url": "https://{chain}-mainnet.nodereal.io/",
- "contest_legend_discord_role_id": "CONTEST_LEGEND_DISCORD_ROLE_ID",
- "contest_popularity_discord_role_id": "CONTEST_POPULARITY_DISCORD_ROLE_ID",
- "contest_participant_discord_role_id": "CONTEST_PARTICIPANT_DISCORD_ROLE_ID",
- "vip3_url": "https://dappapi.vip3.io/",
- "geniidata_url": "https://api.geniidata.com/api/1/brc20/balance?",
- "geniidata_api_key": "142cf1b0-1ca7-11ee-bb5e-9d74c2e854ac"
- },
- "prod": {
- "twitter_official_url": "https://api.twitter.com",
- "twitter_litentry_url": "",
- "twitter_auth_token_v2": "abcdefghijklmnopqrstuvwxyz",
- "discord_official_url": "https://discordapp.com",
- "discord_litentry_url": "",
- "discord_auth_token": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "achainable_url": "https://label-production.graph.tdf-labs.io",
- "achainable_auth_key": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "credential_endpoint": "",
- "oneblock_notion_key": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "oneblock_notion_url": "https://abc.com",
- "sora_quiz_master_id": "SORA_QUIZ_MASTER_ID",
- "sora_quiz_attendee_id": "SORA_QUIZ_ATTENDEE_ID",
- "nodereal_api_key": "NODEREAL_API_KEY",
- "nodereal_api_retry_delay": 5000,
- "nodereal_api_retry_times": 2,
- "nodereal_api_url": "https://open-platform.nodereal.io/",
- "nodereal_api_chain_network_url": "https://{chain}-mainnet.nodereal.io/",
- "contest_legend_discord_role_id": "CONTEST_LEGEND_DISCORD_ROLE_ID",
- "contest_popularity_discord_role_id": "CONTEST_POPULARITY_DISCORD_ROLE_ID",
- "contest_participant_discord_role_id": "CONTEST_PARTICIPANT_DISCORD_ROLE_ID",
- "vip3_url": "https://dappapi.vip3.io/",
- "geniidata_url": "https://api.geniidata.com/api/1/brc20/balance?",
- "geniidata_api_key": "142cf1b0-1ca7-11ee-bb5e-9d74c2e854ac"
- },
- "staging": {
- "twitter_official_url": "https://api.twitter.com",
- "twitter_litentry_url": "http://54.255.182.249:9527",
- "twitter_auth_token_v2": "abcdefghijklmnopqrstuvwxyz",
- "discord_official_url": "https://discordapp.com",
- "discord_litentry_url": "http://54.255.182.249:9527",
- "discord_auth_token": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "achainable_url": "https://label-production.graph.tdf-labs.io",
- "achainable_auth_key": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "credential_endpoint": "wss://tee-staging.litentry.io",
- "oneblock_notion_key": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "oneblock_notion_url": "https://abc.com",
- "sora_quiz_master_id": "SORA_QUIZ_MASTER_ID",
- "sora_quiz_attendee_id": "SORA_QUIZ_ATTENDEE_ID",
- "nodereal_api_key": "NODEREAL_API_KEY",
- "nodereal_api_retry_delay": 5000,
- "nodereal_api_retry_times": 2,
- "nodereal_api_url": "https://open-platform.nodereal.io/",
- "nodereal_api_chain_network_url": "https://{chain}-mainnet.nodereal.io/",
- "contest_legend_discord_role_id": "CONTEST_LEGEND_DISCORD_ROLE_ID",
- "contest_popularity_discord_role_id": "CONTEST_POPULARITY_DISCORD_ROLE_ID",
- "contest_participant_discord_role_id": "CONTEST_PARTICIPANT_DISCORD_ROLE_ID",
- "vip3_url": "https://dappapi.vip3.io/",
- "geniidata_url": "https://api.geniidata.com/api/1/brc20/balance?",
- "geniidata_api_key": "142cf1b0-1ca7-11ee-bb5e-9d74c2e854ac"
- }
-}
\ No newline at end of file
diff --git a/tee-worker/service/src/tests/commons.rs b/tee-worker/service/src/tests/commons.rs
index 0060c2d825..05bb81810a 100644
--- a/tee-worker/service/src/tests/commons.rs
+++ b/tee-worker/service/src/tests/commons.rs
@@ -56,7 +56,6 @@ pub fn local_worker_config(
"4545".to_string(),
crate::config::pwd(),
None,
- Default::default(),
false,
"19527".to_string(),
"0".to_string(),
diff --git a/tee-worker/ts-tests/worker/resuming_worker.test.ts b/tee-worker/ts-tests/worker/resuming_worker.test.ts
index 62a12a7c9d..f5a7f49c1d 100644
--- a/tee-worker/ts-tests/worker/resuming_worker.test.ts
+++ b/tee-worker/ts-tests/worker/resuming_worker.test.ts
@@ -63,7 +63,6 @@ function generateWorkerCommandArguments(
const isLaunch = command === 'launch';
return [
- '--running-mode mock',
...(workerParams.enableMockServer ? ['--enable-mock-server'] : []),
...(isLaunch ? ['--clean-reset'] : []),
'--mu-ra-external-address localhost',