11module pyth_lazer ::state ;
22
3- use pyth_lazer::admin::{Self , AdminCap };
3+ #[test_only]
4+ use pyth_lazer::admin;
5+ use pyth_lazer::admin::AdminCap ;
46
57const SECP256K1_COMPRESSED_PUBKEY_LEN : u64 = 33 ;
68const EInvalidPubkeyLen : u64 = 1 ;
@@ -35,9 +37,9 @@ public fun public_key(info: &TrustedSignerInfo): &vector<u8> {
3537 &info.public_key
3638}
3739
38- /// Get the trusted signer's expiry timestamp (seconds since Unix epoch)
39- public fun expires_at (info: &TrustedSignerInfo ): u64 {
40- info.expires_at
40+ /// Get the trusted signer's expiry timestamp, converted to milliseconds
41+ public fun expires_at_ms (info: &TrustedSignerInfo ): u64 {
42+ info.expires_at * 1000
4143}
4244
4345/// Get the list of trusted signers
@@ -50,43 +52,42 @@ public fun get_trusted_signers(s: &State): &vector<TrustedSignerInfo> {
5052/// - If the expired_at is set to zero, the trusted signer will be removed.
5153/// - If the pubkey isn't found, it is added as a new trusted signer with the given expires_at.
5254public fun update_trusted_signer (_: &AdminCap , s: &mut State , pubkey: vector <u8 >, expires_at: u64 ) {
53- assert !(vector :: length (&pubkey) as u64 == SECP256K1_COMPRESSED_PUBKEY_LEN , EInvalidPubkeyLen );
55+ assert !(pubkey. length () == SECP256K1_COMPRESSED_PUBKEY_LEN , EInvalidPubkeyLen );
5456
5557 let mut maybe_idx = find_signer_index (&s.trusted_signers, &pubkey);
5658 if (expires_at == 0 ) {
57- if (option:: is_some (&maybe_idx )) {
58- let idx = option:: extract (& mut maybe_idx );
59+ if (maybe_idx. is_some ()) {
60+ let idx = maybe_idx. extract ();
5961 // Remove by swapping with last (order not preserved), discard removed value
60- let _ = vector :: swap_remove (& mut s.trusted_signers, idx);
62+ let _ = s.trusted_signers. swap_remove ( idx);
6163 } else {
62- option:: destroy_none (maybe_idx );
64+ maybe_idx. destroy_none ();
6365 abort ESignerNotFound
6466 };
6567 return
6668 };
6769
68- if (option:: is_some (&maybe_idx )) {
69- let idx = option:: extract (& mut maybe_idx );
70- let info_ref = vector :: borrow_mut ( &mut s.trusted_signers, idx) ;
70+ if (maybe_idx. is_some ()) {
71+ let idx = maybe_idx. extract ();
72+ let info_ref = &mut s.trusted_signers[ idx] ;
7173 info_ref.expires_at = expires_at
7274 } else {
73- option::destroy_none (maybe_idx);
74- vector ::push_back (
75- &mut s.trusted_signers,
76- TrustedSignerInfo { public_key: pubkey, expires_at },
77- )
75+ maybe_idx.destroy_none ();
76+ s.trusted_signers.push_back (
77+ TrustedSignerInfo { public_key: pubkey, expires_at }
78+ );
7879 }
7980}
8081
8182public fun find_signer_index (
8283 signers: &vector <TrustedSignerInfo >,
8384 public_key: &vector <u8 >,
8485): Option <u64 > {
85- let len = vector :: length (signers );
86+ let len = signers. length ();
8687 let mut i: u64 = 0 ;
87- while (i < ( len as u64 ) ) {
88- let info_ref = vector :: borrow ( signers, i) ;
89- if (* public_key (info_ref ) == * public_key) {
88+ while (i < len) {
89+ let signer = & signers[i] ;
90+ if (signer . public_key () == public_key) {
9091 return option::some (i)
9192 };
9293 i = i + 1
@@ -106,7 +107,7 @@ public fun new_for_test(ctx: &mut TxContext): State {
106107public fun destroy_for_test (s: State ) {
107108 let State { id, trusted_signers } = s;
108109 let _ = trusted_signers;
109- object:: delete (id );
110+ id. delete ();
110111}
111112
112113#[test]
@@ -120,16 +121,15 @@ public fun test_add_new_signer() {
120121
121122 update_trusted_signer (&admin_cap, &mut s, pk, expiry);
122123
123- let signers_ref = get_trusted_signers (&s);
124- assert !(vector ::length (signers_ref) == 1 , 100 );
125- let info = vector ::borrow (signers_ref, 0 );
126- assert !(expires_at (info) == 123 , 101 );
127- let got_pk = public_key (info);
128- assert !(vector ::length (got_pk) == (SECP256K1_COMPRESSED_PUBKEY_LEN as u64 ), 102 );
129- let State { id, trusted_signers } = s;
130- let _ = trusted_signers;
131- object::delete (id);
132- admin::destroy_for_test (admin_cap);
124+ let signers_ref = s.get_trusted_signers ();
125+ assert !(signers_ref.length () == 1 , 100 );
126+ let info = &signers_ref[0 ];
127+ assert !(info.expires_at == 123 , 101 );
128+ let got_pk = info.public_key ();
129+ assert !(got_pk.length () == SECP256K1_COMPRESSED_PUBKEY_LEN , 102 );
130+
131+ s.destroy_for_test ();
132+ admin_cap.destroy_for_test ();
133133}
134134
135135#[test]
@@ -151,14 +151,13 @@ public fun test_update_existing_signer_expiry() {
151151 2000 ,
152152 );
153153
154- let signers_ref = get_trusted_signers (&s);
155- assert !(vector ::length (signers_ref) == 1 , 110 );
156- let info = vector ::borrow (signers_ref, 0 );
157- assert !(expires_at (info) == 2000 , 111 );
158- let State { id, trusted_signers } = s;
159- let _ = trusted_signers;
160- object::delete (id);
161- admin::destroy_for_test (admin_cap);
154+ let signers_ref = s.get_trusted_signers ();
155+ assert !(signers_ref.length () == 1 , 110 );
156+ let info = &signers_ref[0 ];
157+ assert !(info.expires_at == 2000 , 111 );
158+
159+ s.destroy_for_test ();
160+ admin_cap.destroy_for_test ();
162161}
163162
164163#[test]
@@ -180,12 +179,11 @@ public fun test_remove_signer_by_zero_expiry() {
180179 0 ,
181180 );
182181
183- let signers_ref = get_trusted_signers (&s);
184- assert !(vector ::length (signers_ref) == 0 , 120 );
185- let State { id, trusted_signers } = s;
186- let _ = trusted_signers;
187- object::delete (id);
188- admin::destroy_for_test (admin_cap);
182+ let signers_ref = s.get_trusted_signers ();
183+ assert !(signers_ref.length () == 0 , 120 );
184+
185+ s.destroy_for_test ();
186+ admin_cap.destroy_for_test ();
189187}
190188
191189#[test, expected_failure(abort_code = EInvalidPubkeyLen)]
@@ -196,10 +194,9 @@ public fun test_invalid_pubkey_length_rejected() {
196194
197195 let short_pk = x"010203 ";
198196 update_trusted_signer (&admin_cap, &mut s, short_pk, 1 );
199- let State { id, trusted_signers } = s;
200- let _ = trusted_signers;
201- object::delete (id);
202- admin::destroy_for_test (admin_cap);
197+
198+ s.destroy_for_test ();
199+ admin_cap.destroy_for_test ();
203200}
204201
205202#[test, expected_failure(abort_code = ESignerNotFound)]
@@ -215,8 +212,7 @@ public fun test_remove_nonexistent_signer_fails() {
215212 x"03aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
216213 0 ,
217214 );
218- let State { id, trusted_signers } = s;
219- let _ = trusted_signers;
220- object::delete (id);
221- admin::destroy_for_test (admin_cap);
215+
216+ s.destroy_for_test ();
217+ admin_cap.destroy_for_test ();
222218}
0 commit comments