Skip to content

Commit 8d7ec15

Browse files
authored
Merge pull request #1491 from opentensor/min-commit-space
Feat/Minimum Commitment Space
2 parents 6e896f1 + 76b3fd8 commit 8d7ec15

File tree

2 files changed

+85
-8
lines changed

2 files changed

+85
-8
lines changed

pallets/commitments/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,13 @@ pub mod pallet {
221221

222222
let cur_block = <frame_system::Pallet<T>>::block_number();
223223

224+
let min_used_space: u64 = 100;
224225
let required_space: u64 = info
225226
.fields
226227
.iter()
227228
.map(|field| field.len_for_rate_limit())
228-
.sum();
229+
.sum::<u64>()
230+
.max(min_used_space);
229231

230232
let mut usage = UsedSpaceOf::<T>::get(netuid, &who).unwrap_or_default();
231233
let cur_block_u64 = cur_block.saturated_into::<u64>();

pallets/commitments/src/tests.rs

Lines changed: 82 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use sp_std::prelude::*;
44
#[cfg(test)]
55
use crate::{
66
CommitmentInfo, CommitmentOf, Config, Data, Error, Event, MaxSpace, Pallet, RateLimit,
7-
Registration, RevealedCommitments, TimelockedIndex,
7+
Registration, RevealedCommitments, TimelockedIndex, UsedSpaceOf,
88
mock::{
99
Balances, DRAND_QUICKNET_SIG_2000_HEX, DRAND_QUICKNET_SIG_HEX, RuntimeEvent, RuntimeOrigin,
1010
Test, TestMaxFields, insert_drand_pulse, new_test_ext, produce_ciphertext,
@@ -887,7 +887,7 @@ fn tempo_based_space_limit_accumulates_in_same_window() {
887887
new_test_ext().execute_with(|| {
888888
let netuid = 1;
889889
let who = 100;
890-
let space_limit = 50;
890+
let space_limit = 150;
891891
MaxSpace::<Test>::set(space_limit);
892892
System::<Test>::set_block_number(0);
893893

@@ -921,7 +921,7 @@ fn tempo_based_space_limit_resets_after_tempo() {
921921
let netuid = 2;
922922
let who = 101;
923923

924-
MaxSpace::<Test>::set(40);
924+
MaxSpace::<Test>::set(250);
925925
System::<Test>::set_block_number(1);
926926

927927
let commit_small = Box::new(CommitmentInfo {
@@ -979,7 +979,7 @@ fn tempo_based_space_limit_does_not_affect_different_netuid() {
979979
let netuid_a = 10;
980980
let netuid_b = 20;
981981
let who = 111;
982-
let space_limit = 50;
982+
let space_limit = 199;
983983
MaxSpace::<Test>::set(space_limit);
984984

985985
let commit_large = Box::new(CommitmentInfo {
@@ -1029,7 +1029,7 @@ fn tempo_based_space_limit_does_not_affect_different_user() {
10291029
let netuid = 10;
10301030
let user1 = 123;
10311031
let user2 = 456;
1032-
let space_limit = 50;
1032+
let space_limit = 199;
10331033
MaxSpace::<Test>::set(space_limit);
10341034

10351035
let commit_large = Box::new(CommitmentInfo {
@@ -1078,7 +1078,7 @@ fn tempo_based_space_limit_sudo_set_max_space() {
10781078
new_test_ext().execute_with(|| {
10791079
let netuid = 3;
10801080
let who = 15;
1081-
MaxSpace::<Test>::set(30);
1081+
MaxSpace::<Test>::set(100);
10821082

10831083
System::<Test>::set_block_number(1);
10841084
let commit_25 = Box::new(CommitmentInfo {
@@ -1098,7 +1098,7 @@ fn tempo_based_space_limit_sudo_set_max_space() {
10981098
Error::<Test>::SpaceLimitExceeded
10991099
);
11001100

1101-
assert_ok!(Pallet::<Test>::set_max_space(RuntimeOrigin::root(), 100));
1101+
assert_ok!(Pallet::<Test>::set_max_space(RuntimeOrigin::root(), 300));
11021102

11031103
assert_ok!(Pallet::<Test>::set_commitment(
11041104
RuntimeOrigin::signed(who),
@@ -1716,3 +1716,78 @@ fn revealed_commitments_keeps_only_10_newest_with_individual_single_field_commit
17161716
}
17171717
});
17181718
}
1719+
1720+
#[test]
1721+
fn usage_respects_minimum_of_100_bytes() {
1722+
new_test_ext().execute_with(|| {
1723+
MaxSpace::<Test>::set(1000);
1724+
1725+
let netuid = 1;
1726+
let who = 99;
1727+
1728+
System::<Test>::set_block_number(1);
1729+
1730+
let small_data = Data::Raw(vec![0u8; 50].try_into().expect("<=128 bytes for Raw"));
1731+
let info_small = Box::new(CommitmentInfo {
1732+
fields: BoundedVec::try_from(vec![small_data]).expect("Must not exceed MaxFields"),
1733+
});
1734+
1735+
let usage_before = UsedSpaceOf::<Test>::get(netuid, who).unwrap_or_default();
1736+
assert_eq!(usage_before.used_space, 0);
1737+
1738+
assert_ok!(Pallet::<Test>::set_commitment(
1739+
RuntimeOrigin::signed(who),
1740+
netuid,
1741+
info_small
1742+
));
1743+
1744+
let usage_after_small =
1745+
UsedSpaceOf::<Test>::get(netuid, who).expect("expected to not panic");
1746+
assert_eq!(
1747+
usage_after_small.used_space, 100,
1748+
"Usage must jump to 100 even though we only used 50 bytes"
1749+
);
1750+
1751+
let big_data = Data::Raw(vec![0u8; 110].try_into().expect("<=128 bytes for Raw"));
1752+
let info_big = Box::new(CommitmentInfo {
1753+
fields: BoundedVec::try_from(vec![big_data]).expect("Must not exceed MaxFields"),
1754+
});
1755+
1756+
assert_ok!(Pallet::<Test>::set_commitment(
1757+
RuntimeOrigin::signed(who),
1758+
netuid,
1759+
info_big
1760+
));
1761+
1762+
let usage_after_big = UsedSpaceOf::<Test>::get(netuid, who).expect("expected to not panic");
1763+
assert_eq!(
1764+
usage_after_big.used_space, 210,
1765+
"Usage should be 100 + 110 = 210 in this epoch"
1766+
);
1767+
1768+
UsedSpaceOf::<Test>::remove(netuid, who);
1769+
let usage_after_wipe = UsedSpaceOf::<Test>::get(netuid, who);
1770+
assert!(
1771+
usage_after_wipe.is_none(),
1772+
"Expected `UsedSpaceOf` entry to be removed"
1773+
);
1774+
1775+
let bigger_data = Data::Raw(vec![0u8; 120].try_into().expect("<=128 bytes for Raw"));
1776+
let info_bigger = Box::new(CommitmentInfo {
1777+
fields: BoundedVec::try_from(vec![bigger_data]).expect("Must not exceed MaxFields"),
1778+
});
1779+
1780+
assert_ok!(Pallet::<Test>::set_commitment(
1781+
RuntimeOrigin::signed(who),
1782+
netuid,
1783+
info_bigger
1784+
));
1785+
1786+
let usage_after_reset =
1787+
UsedSpaceOf::<Test>::get(netuid, who).expect("expected to not panic");
1788+
assert_eq!(
1789+
usage_after_reset.used_space, 120,
1790+
"After wiping old usage, the new usage should be exactly 120"
1791+
);
1792+
});
1793+
}

0 commit comments

Comments
 (0)