Skip to content

Commit 9e5a0c9

Browse files
committed
add test cases
1 parent 2251551 commit 9e5a0c9

File tree

1 file changed

+106
-0
lines changed
  • pallets/subtensor/src/tests

1 file changed

+106
-0
lines changed

pallets/subtensor/src/tests/evm.rs

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,109 @@ fn test_associate_evm_key_using_wrong_hash_function() {
234234
);
235235
});
236236
}
237+
238+
#[test]
239+
fn test_associate_evm_key_rate_limit_exceeded() {
240+
new_test_ext(1).execute_with(|| {
241+
let netuid = NetUid::from(1);
242+
243+
let tempo: u16 = 2;
244+
let modality: u16 = 2;
245+
add_network(netuid, tempo, modality);
246+
System::set_block_number(EvmKeyAssociateRateLimit::get());
247+
248+
let coldkey = U256::from(1);
249+
let hotkey = U256::from(2);
250+
SubtensorModule::create_account_if_non_existent(&coldkey, &hotkey);
251+
252+
register_ok_neuron(netuid, hotkey, coldkey, 0);
253+
254+
let pair = ecdsa::Pair::generate().0;
255+
let public = pair.public();
256+
let evm_key = public_to_evm_key(&public);
257+
let block_number = frame_system::Pallet::<Test>::block_number();
258+
let hashed_block_number = keccak_256(block_number.encode().as_ref());
259+
let hotkey_bytes = hotkey.encode();
260+
261+
let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat();
262+
let signature = sign_evm_message(&pair, message);
263+
264+
// First association should succeed
265+
assert_ok!(SubtensorModule::associate_evm_key(
266+
RuntimeOrigin::signed(hotkey),
267+
netuid,
268+
evm_key,
269+
block_number,
270+
signature.clone(),
271+
));
272+
273+
System::set_block_number(System::block_number() + 1);
274+
let block_number = frame_system::Pallet::<Test>::block_number();
275+
let hashed_block_number = keccak_256(block_number.encode().as_ref());
276+
let hotkey_bytes = hotkey.encode();
277+
let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat();
278+
let signature = sign_evm_message(&pair, message);
279+
280+
// Second association should fail due to rate limit
281+
assert_noop!(
282+
SubtensorModule::associate_evm_key(
283+
RuntimeOrigin::signed(hotkey),
284+
netuid,
285+
evm_key,
286+
block_number,
287+
signature.clone(),
288+
),
289+
Error::<Test>::EvmKeyAssociateRateLimitExceeded
290+
);
291+
292+
System::set_block_number(System::block_number() + EvmKeyAssociateRateLimit::get());
293+
let block_number = frame_system::Pallet::<Test>::block_number();
294+
let hashed_block_number = keccak_256(block_number.encode().as_ref());
295+
let hotkey_bytes = hotkey.encode();
296+
let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat();
297+
let signature = sign_evm_message(&pair, message);
298+
299+
assert_ok!(SubtensorModule::associate_evm_key(
300+
RuntimeOrigin::signed(hotkey),
301+
netuid,
302+
evm_key,
303+
block_number,
304+
signature.clone(),
305+
));
306+
});
307+
}
308+
309+
#[test]
310+
fn test_associate_evm_key_uid_not_found() {
311+
new_test_ext(1).execute_with(|| {
312+
let netuid = NetUid::from(1);
313+
314+
let tempo: u16 = 2;
315+
let modality: u16 = 2;
316+
317+
add_network(netuid, tempo, modality);
318+
319+
let hotkey = U256::from(2);
320+
321+
let pair = ecdsa::Pair::generate().0;
322+
let public = pair.public();
323+
let evm_key = public_to_evm_key(&public);
324+
let block_number = frame_system::Pallet::<Test>::block_number();
325+
let hashed_block_number = keccak_256(block_number.encode().as_ref());
326+
let hotkey_bytes = hotkey.encode();
327+
328+
let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat();
329+
let signature = sign_evm_message(&pair, message);
330+
331+
assert_noop!(
332+
SubtensorModule::associate_evm_key(
333+
RuntimeOrigin::signed(hotkey),
334+
netuid,
335+
evm_key,
336+
block_number,
337+
signature.clone(),
338+
),
339+
Error::<Test>::NonAssociatedColdKey
340+
);
341+
});
342+
}

0 commit comments

Comments
 (0)