@@ -5,12 +5,6 @@ extern crate alloc;
5
5
#[ global_allocator]
6
6
static ALLOC : mini_alloc:: MiniAlloc = mini_alloc:: MiniAlloc :: INIT ;
7
7
8
- // #[cfg(all(not(feature = "std"), not(test)))]
9
- // #[panic_handler]
10
- // fn panic(_info: &core::panic::PanicInfo) -> ! {
11
- // loop {}
12
- // }
13
-
14
8
use alloc:: vec:: Vec ;
15
9
use stylus_sdk:: {
16
10
prelude:: { entrypoint, public, storage, SolidityError } ,
@@ -112,7 +106,7 @@ pub enum WormholeError {
112
106
}
113
107
114
108
pub trait IWormhole {
115
- fn parse_and_verify_vaa ( & self , encoded_vaa : Vec < u8 > ) -> Result < VAA , WormholeError > ;
109
+ fn parse_and_verify_vm ( & self , encoded_vaa : Vec < u8 > ) -> Result < VAA , WormholeError > ;
116
110
fn get_guardian_set ( & self , index : u32 ) -> Option < GuardianSet > ;
117
111
fn get_current_guardian_set_index ( & self ) -> u32 ;
118
112
fn governance_action_is_consumed ( & self , hash : Vec < u8 > ) -> bool ;
@@ -122,8 +116,8 @@ pub trait IWormhole {
122
116
fn submit_new_guardian_set ( & mut self , encoded_vaa : Vec < u8 > ) -> Result < ( ) , WormholeError > ;
123
117
}
124
118
125
- #[ entrypoint]
126
119
#[ storage]
120
+ #[ entrypoint]
127
121
pub struct WormholeContract {
128
122
current_guardian_set_index : StorageUint < 256 , 4 > ,
129
123
chain_id : StorageUint < 256 , 4 > ,
@@ -136,7 +130,6 @@ pub struct WormholeContract {
136
130
guardian_keys : StorageMap < U256 , StorageAddress > ,
137
131
}
138
132
139
- #[ public]
140
133
impl WormholeContract {
141
134
pub fn initialize (
142
135
& mut self ,
@@ -153,7 +146,7 @@ impl WormholeContract {
153
146
return Err ( WormholeError :: InvalidInput ( InvalidInput { } ) . into ( ) ) ;
154
147
}
155
148
156
- self . current_guardian_set_index . set ( 0 ) ;
149
+ self . current_guardian_set_index . set ( U256 :: from ( 0 ) ) ;
157
150
self . chain_id . set ( U256 :: from ( chain_id) ) ;
158
151
self . governance_chain_id . set ( U256 :: from ( governance_chain_id) ) ;
159
152
self . governance_contract . set ( governance_contract) ;
@@ -210,7 +203,7 @@ impl WormholeContract {
210
203
}
211
204
}
212
205
213
- pub fn parse_and_verify_vaa ( & self , encoded_vaa : Vec < u8 > ) -> Result < Vec < u8 > , Vec < u8 > > {
206
+ pub fn parse_and_verify_vm ( & self , encoded_vaa : Vec < u8 > ) -> Result < Vec < u8 > , Vec < u8 > > {
214
207
if !self . initialized . get ( ) {
215
208
return Err ( WormholeError :: NotInitialized ( NotInitialized { } ) . into ( ) ) ;
216
209
}
@@ -219,9 +212,9 @@ impl WormholeContract {
219
212
return Err ( WormholeError :: InvalidVAAFormat ( InvalidVAAFormat { } ) . into ( ) ) ;
220
213
}
221
214
222
- let vaa = self . parse_vaa ( & encoded_vaa) ?;
215
+ let vaa = self . parse_vm ( & encoded_vaa) ?;
223
216
224
- let verified = self . verify_vaa ( & vaa) ;
217
+ let verified = self . verify_vm ( & vaa) ;
225
218
226
219
Ok ( vaa. payload )
227
220
}
@@ -232,11 +225,11 @@ impl WormholeContract {
232
225
}
233
226
234
227
impl WormholeContract {
235
- fn parse_vaa ( & self , encoded_vaa : & [ u8 ] ) -> Result < VAA , WormholeError > {
236
- Self :: parse_vaa_static ( encoded_vaa)
228
+ fn parse_vm ( & self , encoded_vaa : & [ u8 ] ) -> Result < VAA , WormholeError > {
229
+ Self :: parse_vm_static ( encoded_vaa)
237
230
}
238
231
239
- fn parse_vaa_static ( encoded_vaa : & [ u8 ] ) -> Result < VAA , WormholeError > {
232
+ fn parse_vm_static ( encoded_vaa : & [ u8 ] ) -> Result < VAA , WormholeError > {
240
233
if encoded_vaa. len ( ) < 6 {
241
234
return Err ( WormholeError :: InvalidVAAFormat ( InvalidVAAFormat { } ) ) ;
242
235
}
@@ -344,7 +337,7 @@ impl WormholeContract {
344
337
} )
345
338
}
346
339
347
- fn verify_vaa ( & self , vaa : & VAA ) -> Result < ( ) , WormholeError > {
340
+ fn verify_vm ( & self , vaa : & VAA ) -> Result < ( ) , WormholeError > {
348
341
let guardian_set = self . get_guardian_set_internal ( vaa. guardian_set_index )
349
342
. ok_or ( WormholeError :: InvalidGuardianSetIndex ( InvalidGuardianSetIndex { } ) ) ?;
350
343
@@ -475,13 +468,13 @@ impl WormholeContract {
475
468
}
476
469
477
470
impl IWormhole for WormholeContract {
478
- fn parse_and_verify_vaa ( & self , encoded_vaa : Vec < u8 > ) -> Result < VAA , WormholeError > {
471
+ fn parse_and_verify_vm ( & self , encoded_vaa : Vec < u8 > ) -> Result < VAA , WormholeError > {
479
472
if !self . initialized . get ( ) {
480
473
return Err ( WormholeError :: NotInitialized ( NotInitialized { } ) ) ;
481
474
}
482
475
483
- let vaa = self . parse_vaa ( & encoded_vaa) ?;
484
- self . verify_vaa ( & vaa) ?;
476
+ let vaa = self . parse_vm ( & encoded_vaa) ?;
477
+ self . verify_vm ( & vaa) ?;
485
478
Ok ( vaa)
486
479
}
487
480
@@ -766,7 +759,7 @@ mod tests {
766
759
#[ motsu:: test]
767
760
fn test_real_wormhole_vaa_parsing ( ) {
768
761
let vaa_vec = test_real_vaa ( ) ;
769
- let result = match WormholeContract :: parse_vaa_static ( & vaa_vec) {
762
+ let result = match WormholeContract :: parse_vm_static ( & vaa_vec) {
770
763
Ok ( vaa) => vaa,
771
764
Err ( _) => panic ! ( "VAA parsing failed" ) ,
772
765
} ;
@@ -777,7 +770,7 @@ mod tests {
777
770
fn test_real_guardian_set_real_vaa_verification ( ) {
778
771
let contract = deploy_with_real_guardians ( ) ;
779
772
let test_vaa = create_vaa_bytes ( "AQAAAAQNABKrA7vVGbeFAN4q6OpjL0zVVs8aPJHPqnj6KuboY755N5i2on/i4nXb2nahbVGDDqj9WV2DgLRdUyqoXL/C6HsBA6l03OVpWBMU5Kjh4a3yn539u/m6ieboUz5D2wAqrt0UHCPgOuXlixoEnYZJ2kTGOT0yqd/grj9g1i9hWkGsi/0BBei0DUXj9iLQ8PQfJGQRWluvvBefZrCi7sIpaN1P10FbABdrFE/Mop+h1n4vHleYqtX1DyD/Hl2CUVPRm+TL6AsABigepLVMC/ybUdI71rW5yKda/DxJ/ZtRa1c7iUOxUnpfENoxwLheaJLMfDVb0bfybkPnbq/UjQ3OjP9LMbb2Y5wBBy1uE/9Pv1nIswbb0H4Q4ej1X7W2vvdWTrt3AmrDPOvYfg3mK+Wae5ifPhCFKas7y2gUfHLm0I7INKTHQ+jjK3oBCjc+jJahqTQu/xPi+kgxvsSwwswoxPEgrd3UsylDbGRMKeEQ8pbB8dP3PzkKThYvVjQ56Vl1+ZZkVf4EzKi7uxIAC03+AG9MIrRsCZenLd8/BwJbr3M1MlIRDAE/JZQctOneEhL0ta0KifLZ8516sfpOLO0j4hyX2JGB7+KhEwaa7rAADOgUbAVn/Od0Mcz5T4Xdu0VJVXbvDcP4WC1vuiKYUuwvHI2lPRwUGEXBinmYuFAzBv5goEO+et71DBPbSocfyAgADUmsnFBn9Sqt1X6QUF3KD8aYb0O7x/w33W/VS+3Bl3JnEjfD8RbDWBmfKhamm6B55g3WytoDz5E+0UfwjMBhEs8BDqxaRg10LY8c2ASx/Ps8UZ8qFYdcQ0liJdfiXxaDMZzwMuQpYr3S+CzartkfaNfRKl4269UtQTxbCHYrnu4XrIMBDzNfMrUQCBQPyYTDsAubNi2AbmAsgrcGHNCquna7ScXaFrYbDrWcxNbXRL20fQ8m7lH1llM3S4UC25smNOino8sBEHDm77bSISVBykPRwfkZdtezi7RGxtFfb0jh1Iu54/pXKyQFjKKOzush9dXGvwCVCeKHL7P+PRT8e+FCxFMFaZEAEVxXoDeizuUQoHG1G+o0MNqT/JS4SfE7SyqZ6VJoezHZIxUFlvqYRufJsGk6FU6OO1zbxdL8evNXIoU0TFHVLwoBaEiioAAAAAAAFYm5HmjQJklWYyvxH4q9IkPKpWxKQsl9m5fq3HG/EHS/AAAAAAAAeRsA3ca06nFfN50X8Ov9vOf/MclvDB12K3Pdhb7X87OIwKs=" ) ;
780
- let result = contract. parse_and_verify_vaa ( test_vaa) ;
773
+ let result = contract. parse_and_verify_vm ( test_vaa) ;
781
774
}
782
775
783
776
#[ motsu:: test]
@@ -791,39 +784,39 @@ mod tests {
791
784
}
792
785
793
786
#[ motsu:: test]
794
- fn test_parse_vaa_invalid_length ( ) {
787
+ fn test_parse_vm_invalid_length ( ) {
795
788
let short_vaa = vec ! [ 1 , 0 , 0 , 0 ] ;
796
- let result = WormholeContract :: parse_vaa_static ( & short_vaa) ;
789
+ let result = WormholeContract :: parse_vm_static ( & short_vaa) ;
797
790
assert ! ( matches!( result, Err ( WormholeError :: InvalidVAAFormat ( InvalidVAAFormat { } ) ) ) ) ;
798
791
}
799
792
800
793
#[ motsu:: test]
801
- fn test_parse_vaa_invalid_version ( ) {
794
+ fn test_parse_vm_invalid_version ( ) {
802
795
let invalid_version_vaa = vec ! [ 2 , 0 , 0 , 0 , 0 , 0 ] ;
803
- let result = WormholeContract :: parse_vaa_static ( & invalid_version_vaa) ;
796
+ let result = WormholeContract :: parse_vm_static ( & invalid_version_vaa) ;
804
797
assert ! ( matches!( result, Err ( WormholeError :: InvalidVAAFormat ( InvalidVAAFormat { } ) ) ) ) ;
805
798
}
806
799
807
800
#[ motsu:: test]
808
- fn test_verify_vaa_invalid_guardian_set ( ) {
801
+ fn test_verify_vm_invalid_guardian_set ( ) {
809
802
let contract = deploy_with_test_guardian ( ) ;
810
803
let vaa = create_test_vaa ( 999 , vec ! [ ] ) ;
811
804
812
- let result = contract. verify_vaa ( & vaa) ;
805
+ let result = contract. verify_vm ( & vaa) ;
813
806
assert ! ( matches!( result, Err ( WormholeError :: InvalidGuardianSetIndex ( InvalidGuardianSetIndex { } ) ) ) ) ;
814
807
}
815
808
816
809
#[ motsu:: test]
817
- fn test_verify_vaa_insufficient_signatures ( ) {
810
+ fn test_verify_vm_insufficient_signatures ( ) {
818
811
let contract = deploy_with_test_guardian ( ) ;
819
812
let vaa = create_test_vaa ( 0 , vec ! [ ] ) ;
820
813
821
- let result = contract. verify_vaa ( & vaa) ;
814
+ let result = contract. verify_vm ( & vaa) ;
822
815
assert ! ( matches!( result, Err ( WormholeError :: InsufficientSignatures ( InsufficientSignatures { } ) ) ) ) ;
823
816
}
824
817
825
818
#[ motsu:: test]
826
- fn test_verify_vaa_invalid_signature_order ( ) {
819
+ fn test_verify_vm_invalid_signature_order ( ) {
827
820
let mut contract = WormholeContract :: default ( ) ;
828
821
let guardians = vec ! [
829
822
Address :: from( [ 0x12u8 ; 20 ] ) ,
@@ -842,19 +835,19 @@ mod tests {
842
835
] ;
843
836
let vaa = create_test_vaa ( 0 , signatures) ; // Use guardian set 0
844
837
845
- let result = contract. verify_vaa ( & vaa) ;
838
+ let result = contract. verify_vm ( & vaa) ;
846
839
assert ! ( matches!( result, Err ( WormholeError :: InvalidSignature ( InvalidSignature { } ) ) ) ) ;
847
840
}
848
841
849
842
#[ motsu:: test]
850
- fn test_verify_vaa_invalid_guardian_index ( ) {
843
+ fn test_verify_vm_invalid_guardian_index ( ) {
851
844
let contract = deploy_with_test_guardian ( ) ;
852
845
let signatures = vec ! [
853
846
create_guardian_signature( 5 ) ,
854
847
] ;
855
848
let vaa = create_test_vaa ( 0 , signatures) ;
856
849
857
- let result = contract. verify_vaa ( & vaa) ;
850
+ let result = contract. verify_vm ( & vaa) ;
858
851
assert ! ( matches!( result, Err ( WormholeError :: InvalidGuardianIndex ( InvalidGuardianIndex { } ) ) ) ) ;
859
852
}
860
853
@@ -903,7 +896,7 @@ mod tests {
903
896
let contract = deploy_with_test_guardian ( ) ;
904
897
905
898
let vaa = create_test_vaa_with_emitter ( 0 , vec ! [ ] , Address :: from ( [ 0x99u8 ; 20 ] ) ) ;
906
- let result = contract. verify_vaa ( & vaa) ;
899
+ let result = contract. verify_vm ( & vaa) ;
907
900
assert ! ( result. is_err( ) ) ;
908
901
}
909
902
@@ -912,7 +905,7 @@ mod tests {
912
905
let contract = deploy_with_mainnet_guardian_set0 ( ) ;
913
906
914
907
let vaa = create_test_vaa ( 2 , vec ! [ ] ) ; // Skip index 1
915
- let result = contract. verify_vaa ( & vaa) ;
908
+ let result = contract. verify_vm ( & vaa) ;
916
909
assert ! ( matches!( result, Err ( WormholeError :: InvalidGuardianSetIndex ( InvalidGuardianSetIndex { } ) ) ) ) ;
917
910
}
918
911
@@ -940,19 +933,19 @@ mod tests {
940
933
941
934
for i in 0 ..10 {
942
935
let corrupted_data = corrupted_vaa ( vec ! [ 1 , 0 , 0 , 1 , 0 , 0 ] , i, i as u8 , ( i * 2 ) as u8 ) ;
943
- let result = WormholeContract :: parse_vaa_static ( & corrupted_data) ;
936
+ let result = WormholeContract :: parse_vm_static ( & corrupted_data) ;
944
937
assert ! ( result. is_err( ) ) ;
945
938
}
946
939
}
947
940
948
941
#[ motsu:: test]
949
- fn test_parse_and_verify_vaa_rejects_corrupted_vaa ( ) {
942
+ fn test_parse_and_verify_vm_rejects_corrupted_vaa ( ) {
950
943
let contract = deploy_with_mainnet_guardians ( ) ;
951
944
952
945
for i in 0 ..5 {
953
946
let base_vaa = vec ! [ 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
954
947
let corrupted_data = corrupted_vaa ( base_vaa, i, i as u8 , ( i * 3 ) as u8 ) ;
955
- let result = WormholeContract :: parse_vaa_static ( & corrupted_data) ;
948
+ let result = WormholeContract :: parse_vm_static ( & corrupted_data) ;
956
949
assert ! ( result. is_err( ) ) ;
957
950
}
958
951
}
@@ -964,7 +957,7 @@ mod tests {
964
957
let mut vaa = create_test_vaa ( 0 , vec ! [ ] ) ;
965
958
vaa. emitter_chain_id = 999 ; // Wrong chain
966
959
967
- let result = contract. verify_vaa ( & vaa) ;
960
+ let result = contract. verify_vm ( & vaa) ;
968
961
assert ! ( result. is_err( ) ) ;
969
962
}
970
963
@@ -1023,7 +1016,7 @@ mod tests {
1023
1016
}
1024
1017
1025
1018
#[ motsu:: test]
1026
- fn test_verify_vaa_with_valid_signatures ( ) {
1019
+ fn test_verify_vm_with_valid_signatures ( ) {
1027
1020
let mut contract = WormholeContract :: default ( ) ;
1028
1021
let guardians = vec ! [
1029
1022
test_guardian_address1( ) ,
@@ -1052,7 +1045,7 @@ mod tests {
1052
1045
hash,
1053
1046
} ;
1054
1047
1055
- let result = contract. verify_vaa ( & vaa) ;
1048
+ let result = contract. verify_vm ( & vaa) ;
1056
1049
}
1057
1050
1058
1051
#[ motsu:: test]
0 commit comments