Skip to content

Commit e8d73bc

Browse files
authored
Merge pull request #1470 from opentensor/commitments-deposit-error
Commitments Deposit Error
2 parents eb9549f + 58b0640 commit e8d73bc

File tree

3 files changed

+51
-5
lines changed

3 files changed

+51
-5
lines changed

pallets/commitments/src/lib.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ pub mod pallet {
120120
CommitmentSetRateLimitExceeded,
121121
/// Space Limit Exceeded for the current interval
122122
SpaceLimitExceeded,
123+
/// Indicates that unreserve returned a leftover, which is unexpected.
124+
UnexpectedUnreserveLeftover,
123125
}
124126

125127
#[pallet::type_value]
@@ -266,7 +268,9 @@ pub mod pallet {
266268
if old_deposit > id.deposit {
267269
let err_amount =
268270
T::Currency::unreserve(&who, old_deposit.saturating_sub(id.deposit));
269-
debug_assert!(err_amount.is_zero());
271+
if !err_amount.is_zero() {
272+
return Err(Error::<T>::UnexpectedUnreserveLeftover.into());
273+
}
270274
}
271275

272276
<CommitmentOf<T>>::insert(netuid, &who, id);

pallets/commitments/src/tests.rs

+45-3
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ use sp_std::prelude::*;
44
#[cfg(test)]
55
use crate::{
66
CommitmentInfo, CommitmentOf, Config, Data, Error, Event, MaxSpace, Pallet, RateLimit,
7-
RevealedCommitments, TimelockedIndex,
7+
Registration, RevealedCommitments, TimelockedIndex,
88
mock::{
9-
DRAND_QUICKNET_SIG_HEX, RuntimeEvent, RuntimeOrigin, Test, insert_drand_pulse,
9+
Balances, DRAND_QUICKNET_SIG_HEX, RuntimeEvent, RuntimeOrigin, Test, insert_drand_pulse,
1010
new_test_ext, produce_ciphertext,
1111
},
1212
};
1313
use frame_support::pallet_prelude::Hooks;
14-
use frame_support::{BoundedVec, assert_noop, assert_ok, traits::Get};
14+
use frame_support::{
15+
BoundedVec, assert_noop, assert_ok,
16+
traits::{Currency, Get, ReservableCurrency},
17+
};
1518
use frame_system::Pallet as System;
1619

1720
#[allow(clippy::indexing_slicing)]
@@ -1220,3 +1223,42 @@ fn on_initialize_reveals_matured_timelocks() {
12201223
}
12211224
});
12221225
}
1226+
1227+
#[test]
1228+
fn set_commitment_unreserve_leftover_fails() {
1229+
new_test_ext().execute_with(|| {
1230+
use frame_system::RawOrigin;
1231+
1232+
let netuid = 999;
1233+
let who = 99;
1234+
1235+
Balances::make_free_balance_be(&who, 10_000);
1236+
1237+
let fake_deposit = 100;
1238+
let dummy_info = CommitmentInfo {
1239+
fields: BoundedVec::try_from(vec![]).expect("empty fields is fine"),
1240+
};
1241+
let registration = Registration {
1242+
deposit: fake_deposit,
1243+
info: dummy_info,
1244+
block: 0u64.into(),
1245+
};
1246+
1247+
CommitmentOf::<Test>::insert(netuid, who, registration);
1248+
1249+
assert_ok!(Balances::reserve(&who, fake_deposit));
1250+
assert_eq!(Balances::reserved_balance(who), 100);
1251+
1252+
Balances::unreserve(&who, 10_000);
1253+
assert_eq!(Balances::reserved_balance(who), 0);
1254+
1255+
let commit_small = Box::new(CommitmentInfo {
1256+
fields: BoundedVec::try_from(vec![]).expect("no fields is fine"),
1257+
});
1258+
1259+
assert_noop!(
1260+
Pallet::<Test>::set_commitment(RawOrigin::Signed(who).into(), netuid, commit_small),
1261+
Error::<Test>::UnexpectedUnreserveLeftover
1262+
);
1263+
});
1264+
}

runtime/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
207207
// `spec_version`, and `authoring_version` are the same between Wasm and native.
208208
// This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use
209209
// the compatible custom types.
210-
spec_version: 255,
210+
spec_version: 256,
211211
impl_version: 1,
212212
apis: RUNTIME_API_VERSIONS,
213213
transaction_version: 1,

0 commit comments

Comments
 (0)