From 4aa316f97e34cc1154591e41a56ca489361c6c61 Mon Sep 17 00:00:00 2001 From: Peter Nose Date: Thu, 26 Feb 2026 12:13:27 +0100 Subject: [PATCH] runtime-sdk/modules/rofl-market: Decrement instances count on cancel --- runtime-sdk/modules/rofl-market/src/lib.rs | 10 +++++++- runtime-sdk/modules/rofl-market/src/test.rs | 27 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/runtime-sdk/modules/rofl-market/src/lib.rs b/runtime-sdk/modules/rofl-market/src/lib.rs index aa1e080c91a..3b22e4a62a0 100644 --- a/runtime-sdk/modules/rofl-market/src/lib.rs +++ b/runtime-sdk/modules/rofl-market/src/lib.rs @@ -677,7 +677,7 @@ impl Module { return Ok(()); } - let provider = state::get_provider(body.provider).ok_or(Error::ProviderNotFound)?; + let mut provider = state::get_provider(body.provider).ok_or(Error::ProviderNotFound)?; let mut instance = state::get_instance(body.provider, body.id).ok_or(Error::InstanceNotFound)?; Self::ensure_caller_is_instance_admin(&instance)?; @@ -694,6 +694,14 @@ impl Module { // We can also directly remove the instance. state::remove_instance(body.provider, body.id); + // Update provider metadata. + provider.instances_count = provider + .instances_count + .checked_sub(1) + .ok_or(Error::InvalidArgument)?; + provider.updated_at = ctx.now(); + state::set_provider(provider); + CurrentState::with(|state| { state.emit_event(Event::InstanceRemoved { provider: body.provider, diff --git a/runtime-sdk/modules/rofl-market/src/test.rs b/runtime-sdk/modules/rofl-market/src/test.rs index 6bdd02c5c56..c3196adddd7 100644 --- a/runtime-sdk/modules/rofl-market/src/test.rs +++ b/runtime-sdk/modules/rofl-market/src/test.rs @@ -1199,6 +1199,33 @@ fn test_instance_accept_timeout() { assert_eq!(balance, 0); let balance = Accounts::get_balance(keys::charlie::address(), Denomination::NATIVE).unwrap(); assert_eq!(balance, 1_000_000); + + // Instance should be removed. + let instances: Vec = signer_alice + .query( + &ctx, + "roflmarket.Instances", + types::ProviderQuery { + provider: keys::alice::address(), + }, + ) + .unwrap(); + assert_eq!(instances.len(), 0, "instance should be removed"); + + // Provider should have no instances. + let provider: types::Provider = signer_alice + .query( + &ctx, + "roflmarket.Provider", + types::ProviderQuery { + provider: keys::alice::address(), + }, + ) + .unwrap(); + assert_eq!( + provider.instances_count, 0, + "provider should have no instances" + ); } #[test]