Skip to content

Commit 5f5e40a

Browse files
authored
poc
1 parent 45746f2 commit 5f5e40a

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

  • contracts/message-transmitter-v2/src

contracts/message-transmitter-v2/src/test.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,44 @@ fn test_receive_message_fails_with_nonce_already_used() {
971971
client.receive_message(&caller, &fixture.message, &fixture.attestation);
972972
}
973973

974+
#[test]
975+
fn test_nonce_expiry_allows_message_replay() {
976+
let ctx = setup_contract();
977+
let client = ctx.client();
978+
let caller = Address::generate(&ctx.env);
979+
980+
let _mock_handler_address = ctx.env.register(MockMessageHandler, ());
981+
let fixture = fixture_valid_message(&ctx.env);
982+
983+
mock_receive_message_auth(
984+
&ctx.env,
985+
&ctx.contract_id,
986+
&caller,
987+
fixture.message.clone(),
988+
fixture.attestation.clone(),
989+
);
990+
client.receive_message(&caller, &fixture.message, &fixture.attestation);
991+
992+
let nonce = MessageV2::get_nonce(&fixture.message).unwrap();
993+
assert!(client.is_nonce_used(&nonce));
994+
995+
let nonce_key = storage::MessageTransmitterStorageKey::UsedNonce(nonce.clone());
996+
ctx.env.as_contract(&ctx.contract_id, || {
997+
ctx.env.storage().persistent().remove(&nonce_key);
998+
});
999+
1000+
assert!(!client.is_nonce_used(&nonce));
1001+
1002+
mock_receive_message_auth(
1003+
&ctx.env,
1004+
&ctx.contract_id,
1005+
&caller,
1006+
fixture.message.clone(),
1007+
fixture.attestation.clone(),
1008+
);
1009+
client.receive_message(&caller, &fixture.message, &fixture.attestation);
1010+
}
1011+
9741012
// =============================================================
9751013
// Attestable Tests
9761014
// =============================================================

0 commit comments

Comments
 (0)