@@ -21,6 +21,7 @@ use crate::block_result::{BlockResult, TxEventStatusCode};
2121use crate :: checksums:: Checksums ;
2222use crate :: id:: Id ;
2323use crate :: ser:: { IbcMessage , TransferData } ;
24+ use crate :: utils:: { self , transfer_to_ibc_tx_kind} ;
2425
2526// We wrap public key in a struct so we serialize data as object instead of
2627// string
@@ -70,58 +71,12 @@ impl TransactionKind {
7071 ) -> Self {
7172 match tx_kind_name {
7273 "tx_transfer" => {
73- if let Ok ( data) = Transfer :: try_from_slice ( data) {
74- let has_shielded_section =
75- data. shielded_section_hash . is_some ( ) ;
76-
77- let ( all_sources_are_masp, any_sources_are_masp) = data
78- . sources
79- . iter ( )
80- . fold ( ( true , false ) , |( all, any) , ( acc, _) | {
81- let is_masp = acc. owner . eq ( masp_address) ;
82- ( all && is_masp, any || is_masp)
83- } ) ;
84-
85- let ( all_targets_are_masp, any_targets_are_masp) = data
86- . targets
87- . iter ( )
88- . fold ( ( true , false ) , |( all, any) , ( acc, _) | {
89- let is_masp = acc. owner . eq ( masp_address) ;
90- ( all && is_masp, any || is_masp)
91- } ) ;
92-
93- match (
94- all_sources_are_masp,
95- any_sources_are_masp,
96- all_targets_are_masp,
97- any_targets_are_masp,
98- has_shielded_section,
99- ) {
100- ( true , _, true , _, true ) => {
101- TransactionKind :: ShieldedTransfer ( Some ( data. into ( ) ) )
102- }
103- ( true , _, _, false , true ) => {
104- TransactionKind :: UnshieldingTransfer ( Some (
105- data. into ( ) ,
106- ) )
107- }
108- ( false , _, true , _, true ) => {
109- TransactionKind :: ShieldingTransfer ( Some (
110- data. into ( ) ,
111- ) )
112- }
113- ( false , _, false , _, false ) => {
114- TransactionKind :: TransparentTransfer ( Some (
115- data. into ( ) ,
116- ) )
117- }
118- _ => TransactionKind :: MixedTransfer ( Some ( data. into ( ) ) ) ,
119- }
74+ if let Ok ( transfer) = Transfer :: try_from_slice ( data) {
75+ utils:: transfer_to_tx_kind ( transfer, masp_address)
12076 } else {
12177 TransactionKind :: Unknown
12278 }
12379 }
124-
12580 "tx_bond" => {
12681 let data = if let Ok ( data) = Bond :: try_from_slice ( data) {
12782 Some ( data)
@@ -236,132 +191,18 @@ impl TransactionKind {
236191 }
237192 namada_ibc:: IbcMessage :: Transfer ( transfer) => {
238193 if let Some ( data) = transfer. transfer {
239- let has_shielded_section =
240- data. shielded_section_hash . is_some ( ) ;
241-
242- let (
243- all_sources_are_masp,
244- any_sources_are_masp,
245- ) = data. sources . iter ( ) . fold (
246- ( true , false ) ,
247- |( all, any) , ( acc, _) | {
248- let is_masp =
249- acc. owner . eq ( masp_address) ;
250- ( all && is_masp, any || is_masp)
251- } ,
252- ) ;
253-
254- let (
255- all_targets_are_masp,
256- any_targets_are_masp,
257- ) = data. targets . iter ( ) . fold (
258- ( true , false ) ,
259- |( all, any) , ( acc, _) | {
260- let is_masp =
261- acc. owner . eq ( masp_address) ;
262- ( all && is_masp, any || is_masp)
263- } ,
264- ) ;
265-
266- match (
267- all_sources_are_masp,
268- any_sources_are_masp,
269- all_targets_are_masp,
270- any_targets_are_masp,
271- has_shielded_section,
272- ) {
273- ( true , _, _, false , true ) => {
274- TransactionKind :: IbcUnshieldingTransfer (
275- (
276- Some ( IbcMessage ( ibc_data) ) ,
277- data. into ( ) ,
278- ) ,
279- )
280- }
281- ( false , _, true , _, true ) => {
282- TransactionKind :: IbcShieldingTransfer ( (
283- Some ( IbcMessage ( ibc_data) ) ,
284- data. into ( ) ,
285- ) )
286- }
287- ( false , _, false , _, false ) => {
288- TransactionKind :: IbcTrasparentTransfer (
289- (
290- Some ( IbcMessage ( ibc_data) ) ,
291- data. into ( ) ,
292- ) ,
293- )
294- }
295- _ => TransactionKind :: MixedTransfer ( Some (
296- data. into ( ) ,
297- ) ) ,
298- }
194+ utils:: transfer_to_tx_kind ( data, masp_address)
299195 } else {
300196 TransactionKind :: IbcMsgTransfer ( None )
301197 }
302198 }
303199 namada_ibc:: IbcMessage :: NftTransfer ( transfer) => {
304200 if let Some ( data) = transfer. transfer {
305- let has_shielded_section =
306- data. shielded_section_hash . is_some ( ) ;
307-
308- let (
309- all_sources_are_masp,
310- any_sources_are_masp,
311- ) = data. sources . iter ( ) . fold (
312- ( true , false ) ,
313- |( all, any) , ( acc, _) | {
314- let is_masp =
315- acc. owner . eq ( masp_address) ;
316- ( all && is_masp, any || is_masp)
317- } ,
318- ) ;
319-
320- let (
321- all_targets_are_masp,
322- any_targets_are_masp,
323- ) = data. targets . iter ( ) . fold (
324- ( true , false ) ,
325- |( all, any) , ( acc, _) | {
326- let is_masp =
327- acc. owner . eq ( masp_address) ;
328- ( all && is_masp, any || is_masp)
329- } ,
330- ) ;
331-
332- match (
333- all_sources_are_masp,
334- any_sources_are_masp,
335- all_targets_are_masp,
336- any_targets_are_masp,
337- has_shielded_section,
338- ) {
339- ( true , _, _, false , true ) => {
340- TransactionKind :: IbcUnshieldingTransfer (
341- (
342- Some ( IbcMessage ( ibc_data) ) ,
343- data. into ( ) ,
344- ) ,
345- )
346- }
347- ( false , _, true , _, true ) => {
348- TransactionKind :: IbcShieldingTransfer ( (
349- Some ( IbcMessage ( ibc_data) ) ,
350- data. into ( ) ,
351- ) )
352- }
353- ( false , _, false , _, false ) => {
354- TransactionKind :: IbcTrasparentTransfer (
355- (
356- Some ( IbcMessage ( ibc_data) ) ,
357- data. into ( ) ,
358- ) ,
359- )
360- }
361- _ => TransactionKind :: MixedTransfer ( Some (
362- data. into ( ) ,
363- ) ) ,
364- }
201+ transfer_to_ibc_tx_kind (
202+ data,
203+ masp_address,
204+ ibc_data,
205+ )
365206 } else {
366207 TransactionKind :: IbcMsgTransfer ( None )
367208 }
0 commit comments