Skip to content

Commit af12395

Browse files
committed
keep all revealed instead of replacing
1 parent 67c0044 commit af12395

File tree

2 files changed

+32
-37
lines changed

2 files changed

+32
-37
lines changed

pallets/commitments/src/lib.rs

+20-8
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ pub mod pallet {
172172
u16,
173173
Twox64Concat,
174174
T::AccountId,
175-
(Vec<u8>, u64), // Data, RevealBlock
175+
Vec<(Vec<u8>, u64)>, // Reveals<(Data, RevealBlock)>
176176
OptionQuery,
177177
>;
178178

@@ -577,15 +577,27 @@ impl<T: Config> Pallet<T> {
577577
}
578578
}
579579

580-
let current_block = <frame_system::Pallet<T>>::block_number();
581-
for field in revealed_fields {
582-
<RevealedCommitments<T>>::insert(netuid, &who, (field, current_block.saturated_into::<u64>()));
583-
Self::deposit_event(Event::CommitmentRevealed {
584-
netuid,
585-
who: who.clone(),
586-
});
580+
if !revealed_fields.is_empty() {
581+
let mut existing_reveals =
582+
RevealedCommitments::<T>::get(netuid, &who).unwrap_or_default();
583+
584+
let current_block = <frame_system::Pallet<T>>::block_number();
585+
let block_u64 = current_block.saturated_into::<u64>();
586+
587+
// Push newly revealed items onto the tail of existing_reveals and emit the event
588+
for revealed_bytes in revealed_fields {
589+
existing_reveals.push((revealed_bytes, block_u64));
590+
591+
Self::deposit_event(Event::CommitmentRevealed {
592+
netuid,
593+
who: who.clone(),
594+
});
595+
}
596+
597+
RevealedCommitments::<T>::insert(netuid, &who, existing_reveals);
587598
}
588599

600+
589601
registration.info.fields = BoundedVec::try_from(remain_fields)
590602
.map_err(|_| "Failed to build BoundedVec for remain_fields")?;
591603

pallets/commitments/src/tests.rs

+12-29
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use frame_support::{
1616
traits::{Currency, Get, ReservableCurrency},
1717
};
1818
use frame_system::Pallet as System;
19-
use sp_core::Decode;
2019

2120
#[allow(clippy::indexing_slicing)]
2221
#[test]
@@ -320,7 +319,7 @@ fn happy_path_timelock_commitments() {
320319
let revealed =
321320
RevealedCommitments::<Test>::get(netuid, who).expect("Should have revealed data");
322321

323-
let (revealed_bytes, _reveal_block) = revealed;
322+
let (revealed_bytes, _reveal_block) = revealed[0].clone();
324323

325324
let revealed_str = sp_std::str::from_utf8(&revealed_bytes)
326325
.expect("Expected valid UTF-8 in the revealed bytes for this test");
@@ -498,8 +497,8 @@ fn reveal_timelocked_commitment_single_field_entry_is_removed_after_reveal() {
498497
System::<Test>::set_block_number(9999);
499498
assert_ok!(Pallet::<Test>::reveal_timelocked_commitments());
500499

501-
let (revealed_bytes, _reveal_block) =
502-
RevealedCommitments::<Test>::get(netuid, who).expect("Expected to find revealed data");
500+
let revealed = RevealedCommitments::<Test>::get(netuid, who).expect("Expected to find revealed data");
501+
let (revealed_bytes, _reveal_block) = revealed[0].clone();
503502

504503
// The decrypted bytes have some extra SCALE metadata in front:
505504
// we slice off the first two bytes before checking the string.
@@ -619,33 +618,17 @@ fn reveal_timelocked_multiple_fields_only_correct_ones_removed() {
619618
let revealed_data = RevealedCommitments::<Test>::get(netuid, who)
620619
.expect("Expected revealed data for TLE #1 and #2");
621620

622-
let (revealed_bytes, _reveal_block) = revealed_data;
621+
let (revealed_bytes1, reveal_block1) = revealed_data[0].clone();
622+
let (revealed_bytes2, reveal_block2) = revealed_data[1].clone();
623623

624-
let revealed_info: CommitmentInfo<<Test as Config>::MaxFields> =
625-
Decode::decode(&mut &revealed_bytes[..])
626-
.expect("Decoding must not fail for multiple timelock test");
624+
let truncated1 = &revealed_bytes1[2..];
625+
let truncated2 = &revealed_bytes2[2..];
627626

628-
assert_eq!(
629-
revealed_info.fields.len(),
630-
2,
631-
"We revealed both TLE #1 and TLE #2 in the same pass"
632-
);
627+
assert_eq!(truncated1, msg_1);
628+
assert_eq!(reveal_block1, 50);
629+
assert_eq!(truncated2, msg_2);
630+
assert_eq!(reveal_block2, 50);
633631

634-
let mut found_msg1 = false;
635-
let mut found_msg2 = false;
636-
for item in &revealed_info.fields {
637-
if let Data::Raw(bytes) = item {
638-
if bytes.as_slice() == msg_1 {
639-
found_msg1 = true;
640-
} else if bytes.as_slice() == msg_2 {
641-
found_msg2 = true;
642-
}
643-
}
644-
}
645-
assert!(
646-
found_msg1 && found_msg2,
647-
"Should see both TLE #1 and TLE #2 in the revealed data"
648-
);
649632
// 9) A second reveal call now does nothing, because no timelocks remain
650633
System::<Test>::set_block_number(51);
651634
assert_ok!(Pallet::<Test>::reveal_timelocked_commitments());
@@ -1198,7 +1181,7 @@ fn on_initialize_reveals_matured_timelocks() {
11981181
"No longer in TimelockedIndex after reveal."
11991182
);
12001183

1201-
let (revealed_bytes, reveal_block) = revealed_opt.expect("expected to not panic");
1184+
let (revealed_bytes, reveal_block) = revealed_opt.expect("expected to not panic")[0].clone();
12021185
assert_eq!(reveal_block, 2, "Should have revealed at block #2");
12031186

12041187
let revealed_str = sp_std::str::from_utf8(&revealed_bytes)

0 commit comments

Comments
 (0)