1
+ #[ cfg( test) ]
2
+ mod test {
3
+ use crate :: error:: PythReceiverError ;
4
+ use crate :: test_data:: * ;
5
+ use crate :: PythReceiver ;
6
+ use alloy_primitives:: { Address , U256 } ;
7
+ use mock_instant:: global:: MockClock ;
8
+ use motsu:: prelude:: * ;
9
+ use pythnet_sdk:: wire:: v1:: { AccumulatorUpdateData , Proof } ;
10
+ use std:: time:: Duration ;
11
+ use hex:: FromHex ;
12
+ use wormhole_contract:: WormholeContract ;
13
+
14
+ const PYTHNET_CHAIN_ID : u16 = 26 ;
15
+ const PYTHNET_EMITTER_ADDRESS : [ u8 ; 32 ] = [
16
+ 0xe1 , 0x01 , 0xfa , 0xed , 0xac , 0x58 , 0x51 , 0xe3 , 0x2b , 0x9b , 0x23 , 0xb5 , 0xf9 , 0x41 , 0x1a ,
17
+ 0x8c , 0x2b , 0xac , 0x4a , 0xae , 0x3e , 0xd4 , 0xdd , 0x7b , 0x81 , 0x1d , 0xd1 , 0xa7 , 0x2e , 0xa4 ,
18
+ 0xaa , 0x71 ,
19
+ ] ;
20
+
21
+ const CHAIN_ID : u16 = 60051 ;
22
+ const GOVERNANCE_CONTRACT : U256 = U256 :: from_limbs ( [ 4 , 0 , 0 , 0 ] ) ;
23
+
24
+ const SINGLE_UPDATE_FEE_IN_WEI : U256 = U256 :: from_limbs ( [ 100 , 0 , 0 , 0 ] ) ;
25
+ const TRANSACTION_FEE_IN_WEI : U256 = U256 :: from_limbs ( [ 32 , 0 , 0 , 0 ] ) ;
26
+
27
+ const TEST_SIGNER1 : Address = Address :: from_slice ( & Vec :: from_hex ( "beFA429d57cD18b7F8A4d91A2da9AB4AF05d0FBe" ) . expect ( "Invalid hex for TEST_SIGNER1" ) ) ;
28
+ const TEST_SIGNER2 : Address = Address :: from_slice ( & Vec :: from_hex ( "4ba0C2db9A26208b3bB1a50B01b16941c10D76db" ) . expect ( "Invalid hex for TEST_SIGNER2" ) ) ;
29
+ const GOVERNANCE_CHAIN_ID : u16 = 1 ;
30
+ const GOVERNANCE_EMITTER : [ u8 ; 32 ] = {
31
+ let v = Vec :: from_hex ( "0000000000000000000000000000000000000000000000000000000000000011" ) . expect ( "Invalid hex for GOVERNANCE_EMITTER" ) ;
32
+ let mut arr = [ 0u8 ; 32 ] ;
33
+ arr. copy_from_slice ( & v) ;
34
+ arr
35
+ } ;
36
+ const TEST_PYTH2_WORMHOLE_CHAIN_ID : u16 = 1 ;
37
+ const TEST_PYTH2_WORMHOLE_EMITTER : [ u8 ; 32 ] = {
38
+ let v = Vec :: from_hex ( "71f8dcb863d176e2c420ad6610cf687359612b6fb392e0642b0ca6b1f186aa3b" ) . expect ( "Invalid hex for TEST_PYTH2_WORMHOLE_EMITTER" ) ;
39
+ let mut arr = [ 0u8 ; 32 ] ;
40
+ arr. copy_from_slice ( & v) ;
41
+ arr
42
+ } ;
43
+ const TARGET_CHAIN_ID : u16 = 2 ;
44
+
45
+ #[ cfg( test) ]
46
+ fn pyth_wormhole_init (
47
+ pyth_contract : & Contract < PythReceiver > ,
48
+ wormhole_contract : & Contract < WormholeContract > ,
49
+ alice : & Address ,
50
+ ) {
51
+ let guardians = current_guardians ( ) ;
52
+ let governance_contract =
53
+ Address :: from_slice ( & GOVERNANCE_CONTRACT . to_be_bytes :: < 32 > ( ) [ 12 ..32 ] ) ;
54
+ wormhole_contract
55
+ . sender ( * alice)
56
+ . initialize (
57
+ guardians,
58
+ 4 ,
59
+ CHAIN_ID ,
60
+ GOVERNANCE_CHAIN_ID ,
61
+ governance_contract,
62
+ )
63
+ . unwrap ( ) ;
64
+
65
+ let single_update_fee = SINGLE_UPDATE_FEE_IN_WEI ;
66
+ let valid_time_period = U256 :: from ( 3600u64 ) ;
67
+
68
+ let data_source_chain_ids = vec ! [ PYTHNET_CHAIN_ID ] ;
69
+ let data_source_emitter_addresses = vec ! [ PYTHNET_EMITTER_ADDRESS ] ;
70
+
71
+ let governance_chain_id = 1u16 ;
72
+ let governance_initial_sequence = 0u64 ;
73
+
74
+ pyth_contract. sender ( * alice) . initialize (
75
+ wormhole_contract. address ( ) ,
76
+ single_update_fee,
77
+ valid_time_period,
78
+ data_source_chain_ids,
79
+ data_source_emitter_addresses,
80
+ governance_chain_id,
81
+ GOVERNANCE_EMITTER ,
82
+ governance_initial_sequence,
83
+ ) ;
84
+ }
85
+
86
+ #[ motsu:: test]
87
+ fn test_set_data_sources (
88
+ pyth_contract : Contract < PythReceiver > ,
89
+ wormhole_contract : Contract < WormholeContract > ,
90
+ alice : Address ,
91
+ ) {
92
+ pyth_wormhole_init ( & pyth_contract, & wormhole_contract, & alice) ;
93
+
94
+ let old_data_sources = vec ! [ PYTHNET_CHAIN_ID ] ;
95
+
96
+ let hex_str = "01000000000100a53d7675143a514fa10756ef19e1281648aec03be2ea071c139f241839cb01206ce5c7f3673fc446a045cab2d4f97ef0de01de70269ab2678bba76b41c3a60ce010000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d010200020100010000000000000000000000000000000000000000000000000000000000001111" ;
97
+ let bytes = Vec :: from_hex ( hex_str) . expect ( "Invalid hex string" ) ;
98
+
99
+ let result = pyth_contract. sender ( alice) . execute_governance_instruction ( bytes) ;
100
+ assert ! ( result. is_ok( ) ) ;
101
+ }
102
+
103
+ }
0 commit comments