From 1e8013c4914fe3068ccd03f985161e6af953dcda Mon Sep 17 00:00:00 2001 From: KevinMB0220 Date: Fri, 23 Jan 2026 12:16:28 -0600 Subject: [PATCH] feat(identity-registry): update contract logic and public API --- .../src/contract.rs | 23 ++++++++++++++++++- .../identity-registry-contract/src/lib.rs | 7 +++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/contracts/identity-registry-contract/src/contract.rs b/contracts/identity-registry-contract/src/contract.rs index 2c462ae..8b0cfe4 100644 --- a/contracts/identity-registry-contract/src/contract.rs +++ b/contracts/identity-registry-contract/src/contract.rs @@ -35,7 +35,28 @@ pub fn batch_add_experts(env:Env, experts: Vec
) -> Result<(), RegistryE Ok(()) } - + +/// Batch ban experts by setting their status to Banned (Admin only) +pub fn batch_ban_experts(env: Env, experts: Vec
) -> Result<(), RegistryError> { + if experts.len() > 20 { + return Err(RegistryError::ExpertVecMax); + } + + let admin = storage::get_admin(&env).ok_or(RegistryError::NotInitialized)?; + admin.require_auth(); + + for expert in experts { + let status = storage::get_expert_status(&env, &expert); + if status == ExpertStatus::Banned { + return Err(RegistryError::AlreadyBanned); + } + storage::set_expert_record(&env, &expert, ExpertStatus::Banned); + events::emit_status_change(&env, expert, status, ExpertStatus::Banned, admin.clone()); + } + + Ok(()) +} + pub fn verify_expert(env: &Env, expert: &Address) -> Result<(), RegistryError> { let admin = storage::get_admin(env).ok_or(RegistryError::NotInitialized)?; diff --git a/contracts/identity-registry-contract/src/lib.rs b/contracts/identity-registry-contract/src/lib.rs index 8ac00bb..e5711de 100644 --- a/contracts/identity-registry-contract/src/lib.rs +++ b/contracts/identity-registry-contract/src/lib.rs @@ -26,7 +26,12 @@ impl IdentityRegistryContract { pub fn batch_add_experts(env: Env, experts: Vec
) -> Result<(), RegistryError> { contract::batch_add_experts(env, experts) } - + + /// Batch ban experts and revoke their verification status (Admin only) + pub fn batch_ban_experts(env: Env, experts: Vec
) -> Result<(), RegistryError> { + contract::batch_ban_experts(env, experts) + } + /// Add an expert to the whitelist (Admin only) pub fn add_expert(env: Env, expert: Address) -> Result<(), RegistryError> { contract::verify_expert(&env, &expert)