From c7b90ffcac944041d5e85dc83f46d4085c990e36 Mon Sep 17 00:00:00 2001 From: Luiz Carvalho Date: Wed, 8 Oct 2025 15:12:01 -0300 Subject: [PATCH] chore(permission0): allow 0 weight recipients --- pallets/permission0/src/ext/stream_impl.rs | 5 +++- pallets/permission0/tests/lifetime.rs | 28 +++++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/pallets/permission0/src/ext/stream_impl.rs b/pallets/permission0/src/ext/stream_impl.rs index f8a0cef..aa4dece 100644 --- a/pallets/permission0/src/ext/stream_impl.rs +++ b/pallets/permission0/src/ext/stream_impl.rs @@ -451,7 +451,10 @@ fn validate_stream_permission_recipients( for (recipient, weight) in recipients { ensure!(delegator != recipient, Error::::InvalidRecipientWeight); - ensure!(*weight > 0, Error::::InvalidRecipientWeight); + ensure!( + revocation.is_revokable() || *weight > 0, + Error::::InvalidRecipientWeight + ); ensure!( T::Torus::is_agent_registered(recipient), Error::::NotRegisteredAgent diff --git a/pallets/permission0/tests/lifetime.rs b/pallets/permission0/tests/lifetime.rs index 0056e7b..13fcf02 100644 --- a/pallets/permission0/tests/lifetime.rs +++ b/pallets/permission0/tests/lifetime.rs @@ -39,6 +39,19 @@ fn irrevocable() { let agent_1 = bob(); let agent_2 = charlie(); + assert_err!( + delegate_stream_permission( + agent_0, + vec![(agent_1, 0), (agent_2, u16::MAX / 2)], + pallet_permission0_api::StreamAllocation::FixedAmount(as_tors(10)), + pallet_permission0_api::DistributionControl::Manual, + pallet_permission0_api::PermissionDuration::Indefinite, + pallet_permission0_api::RevocationTerms::Irrevocable, + pallet_permission0_api::EnforcementAuthority::None, + ), + Error::::InvalidRecipientWeight + ); + let permission_id = assert_ok!(delegate_stream_permission( agent_0, vec![(agent_1, u16::MAX / 2), (agent_2, u16::MAX / 2)], @@ -81,7 +94,7 @@ fn revocable_by_delegator() { let permission_id = assert_ok!(delegate_stream_permission( agent_0, - vec![(agent_1, u16::MAX / 2), (agent_2, u16::MAX / 2)], + vec![(agent_1, 0), (agent_2, u16::MAX / 2)], pallet_permission0_api::StreamAllocation::FixedAmount(as_tors(10)), pallet_permission0_api::DistributionControl::Manual, pallet_permission0_api::PermissionDuration::Indefinite, @@ -128,6 +141,19 @@ fn revocable_after_block() { let agent_1 = bob(); let agent_2 = charlie(); + assert_err!( + delegate_stream_permission( + agent_0, + vec![(agent_1, 0), (agent_2, u16::MAX / 2)], + pallet_permission0_api::StreamAllocation::FixedAmount(as_tors(10)), + pallet_permission0_api::DistributionControl::Manual, + pallet_permission0_api::PermissionDuration::Indefinite, + pallet_permission0_api::RevocationTerms::RevocableAfter(2), + pallet_permission0_api::EnforcementAuthority::None, + ), + Error::::InvalidRecipientWeight + ); + let permission_id = assert_ok!(delegate_stream_permission( agent_0, vec![(agent_1, u16::MAX / 2), (agent_2, u16::MAX / 2)],