55use anchor_lang:: prelude:: thiserror;
66use anchor_lang:: { AnchorDeserialize , Key } ;
77
8- use solana_axelar_std:: MerkleTree ;
9- use solana_axelar_std:: { hasher:: LeafHash , Message , MessageLeaf , VerifierSetLeaf } ;
8+ use solana_axelar_std:: { Message , Messages , Payload , PayloadType } ;
109
1110use libsecp256k1:: SecretKey ;
1211use mollusk_svm:: result:: InstructionResult ;
1312use mollusk_svm:: result:: ProgramResult ;
1413use relayer_discovery:: structs:: RelayerTransaction ;
1514use relayer_discovery:: { find_transaction_pda, ConvertError , RelayerDiscovery } ;
1615use solana_axelar_gateway_test_fixtures:: {
17- approve_message_helper, create_verifier_info , initialize_gateway ,
18- initialize_payload_verification_session_with_root , setup_test_with_real_signers,
16+ approve_message_helper, create_merklized_messages_from_std , create_signing_verifier_set_leaves ,
17+ initialize_gateway , initialize_payload_verification_session , setup_test_with_real_signers,
1918 verify_signature_helper, TestSetup ,
2019} ;
2120use solana_sdk:: pubkey:: ParsePubkeyError ;
@@ -30,8 +29,6 @@ pub struct RelayerDiscoveryTestFixture {
3029 /// This has the mollusk aslongside a lot of information about the gateway
3130 pub setup : TestSetup ,
3231 /// The rest of the information is required to approve massages to the gateway
33- pub verifier_leaves : Vec < VerifierSetLeaf > ,
34- pub verifier_merkle_tree : MerkleTree ,
3532 pub secret_key_1 : SecretKey ,
3633 pub secret_key_2 : SecretKey ,
3734 pub init_result : InstructionResult ,
@@ -78,16 +75,13 @@ impl RelayerDiscoveryTestFixture {
7875 ///
7976 /// Returns the `RelayerDiscoveryTestFixture` generated.
8077 pub fn new ( ) -> RelayerDiscoveryTestFixture {
81- let ( setup, verifier_leaves, verifier_merkle_tree, secret_key_1, secret_key_2) =
82- setup_test_with_real_signers ( ) ;
78+ let ( setup, secret_key_1, secret_key_2) = setup_test_with_real_signers ( ) ;
8379
8480 // Step 2: Initialize gateway
8581 let init_result = initialize_gateway ( & setup) ;
8682
8783 RelayerDiscoveryTestFixture {
8884 setup,
89- verifier_leaves,
90- verifier_merkle_tree,
9185 secret_key_1,
9286 secret_key_2,
9387 init_result,
@@ -106,30 +100,9 @@ impl RelayerDiscoveryTestFixture {
106100 pub fn approve ( & mut self , message : & Message ) -> InstructionResult {
107101 let messages = vec ! [ message. clone( ) ] ;
108102
109- let message_leaves: Vec < MessageLeaf > = messages
110- . iter ( )
111- . enumerate ( )
112- . map ( |( i, msg) | MessageLeaf {
113- message : msg. clone ( ) ,
114- position : u16:: try_from ( i) . unwrap ( ) ,
115- set_size : u16:: try_from ( messages. len ( ) ) . unwrap ( ) ,
116- domain_separator : self . setup . domain_separator ,
117- } )
118- . collect ( ) ;
119-
120- let message_leaf_hashes: Vec < [ u8 ; 32 ] > =
121- message_leaves. iter ( ) . map ( MessageLeaf :: hash) . collect ( ) ;
122-
123- let message_merkle_tree = MerkleTree :: from_leaves ( & message_leaf_hashes) ;
124- let payload_merkle_root = message_merkle_tree. root ( ) . unwrap ( ) ;
125-
126- // Step 4: Initialize payload verification session
127- let ( session_result, verification_session_pda) =
128- initialize_payload_verification_session_with_root (
129- & self . setup ,
130- & self . init_result ,
131- payload_merkle_root,
132- ) ;
103+ // Create payload merkle root using std crate approach
104+ let ( _, payload_merkle_root) =
105+ create_merklized_messages_from_std ( self . setup . domain_separator , & messages) ;
133106
134107 let gateway_root_account = self
135108 . init_result
@@ -139,64 +112,84 @@ impl RelayerDiscoveryTestFixture {
139112 let verifier_set_tracker_account = self
140113 . init_result
141114 . get_account ( & self . setup . verifier_set_tracker_pda )
142- . unwrap ( ) ;
115+ . unwrap ( )
116+ . clone ( ) ;
143117
118+ let ( session_result, verification_session_pda) = initialize_payload_verification_session (
119+ & self . setup ,
120+ gateway_root_account. clone ( ) ,
121+ verifier_set_tracker_account. clone ( ) ,
122+ payload_merkle_root,
123+ PayloadType :: ApproveMessages ,
124+ ) ;
144125 let verification_session_account = session_result
145126 . get_account ( & verification_session_pda)
146127 . unwrap ( ) ;
147128
148129 // Step 5: Sign the payload with both signers, verify both signatures on the gateway
149- let verifier_info_1 = create_verifier_info (
130+ let payload_to_be_signed = Payload :: Messages ( Messages ( messages. clone ( ) ) ) ;
131+ let signing_verifier_set_leaves = create_signing_verifier_set_leaves (
132+ self . setup . domain_separator ,
150133 & self . secret_key_1 ,
151- payload_merkle_root,
152- & self . verifier_leaves [ 0 ] ,
153- 0 , // Position 0
154- & self . verifier_merkle_tree ,
134+ & self . secret_key_2 ,
135+ payload_to_be_signed,
136+ self . setup . verifier_set . clone ( ) ,
155137 ) ;
156138
139+ let verifier_info_1 = signing_verifier_set_leaves[ 0 ] . clone ( ) ;
140+
157141 let verify_result_1 = verify_signature_helper (
158142 & self . setup ,
159143 payload_merkle_root,
160144 verifier_info_1,
161- verification_session_pda,
145+ (
146+ verification_session_pda,
147+ verification_session_account. clone ( ) ,
148+ ) ,
162149 gateway_root_account. clone ( ) ,
163- verification_session_account. clone ( ) ,
164- self . setup . verifier_set_tracker_pda ,
165- verifier_set_tracker_account. clone ( ) ,
150+ (
151+ self . setup . verifier_set_tracker_pda ,
152+ verifier_set_tracker_account. clone ( ) ,
153+ ) ,
166154 ) ;
167155
168156 let updated_verification_account_after_first = verify_result_1
169157 . get_account ( & verification_session_pda)
170- . unwrap ( ) ;
158+ . unwrap ( )
159+ . clone ( ) ;
171160
172- let verifier_info_2 = create_verifier_info (
173- & self . secret_key_2 ,
174- payload_merkle_root,
175- & self . verifier_leaves [ 1 ] ,
176- 1 , // Position 1
177- & self . verifier_merkle_tree ,
178- ) ;
161+ let verifier_info_2 = signing_verifier_set_leaves[ 1 ] . clone ( ) ;
179162
180163 let verify_result_2 = verify_signature_helper (
181164 & self . setup ,
182165 payload_merkle_root,
183166 verifier_info_2,
184- verification_session_pda,
167+ (
168+ verification_session_pda,
169+ updated_verification_account_after_first. clone ( ) ,
170+ ) ,
185171 gateway_root_account. clone ( ) ,
186- updated_verification_account_after_first. clone ( ) ,
187- self . setup . verifier_set_tracker_pda ,
188- verifier_set_tracker_account. clone ( ) ,
172+ (
173+ self . setup . verifier_set_tracker_pda ,
174+ verifier_set_tracker_account. clone ( ) ,
175+ ) ,
189176 ) ;
190177
191178 // Step 6: Approve the message
179+ let final_gateway_account = verify_result_2
180+ . get_account ( & self . setup . gateway_root_pda )
181+ . unwrap ( )
182+ . clone ( ) ;
183+ let final_verification_session_account = verify_result_2
184+ . get_account ( & verification_session_pda)
185+ . unwrap ( )
186+ . clone ( ) ;
187+
192188 let ( approve_result, _) = approve_message_helper (
193189 & self . setup ,
194- message_merkle_tree,
195- message_leaves,
196190 & messages,
197- payload_merkle_root,
198- verification_session_pda,
199- verify_result_2,
191+ ( verification_session_pda, final_verification_session_account) ,
192+ final_gateway_account,
200193 0 , // position
201194 ) ;
202195
0 commit comments