@@ -3,17 +3,21 @@ extern crate alloc;
3
3
4
4
pub mod structs;
5
5
6
- use core:: slice;
6
+ use core:: { ptr :: null_mut , slice} ;
7
7
8
- use alloc:: boxed:: Box ;
9
- use app_zcash:: get_address;
8
+ use alloc:: { boxed:: Box , string:: ToString , vec} ;
9
+ use app_zcash:: {
10
+ get_address,
11
+ pczt:: structs:: { ParsedFrom , ParsedOrchard , ParsedPczt , ParsedTo , ParsedTransparent } ,
12
+ } ;
10
13
use common_rust_c:: {
11
- structs:: { Response , SimpleResponse } ,
12
- types:: { PtrBytes , PtrString } ,
14
+ structs:: { Response , SimpleResponse , TransactionParseResult } ,
15
+ types:: { Ptr , PtrBytes , PtrString , PtrUR } ,
13
16
utils:: { convert_c_char, recover_c_char} ,
14
17
} ;
15
- use keystore:: algorithms:: zcash:: { self , calculate_seed_fingerprint, derive_ufvk} ;
16
18
use cty:: c_char;
19
+ use keystore:: algorithms:: zcash:: { self , calculate_seed_fingerprint, derive_ufvk} ;
20
+ use structs:: DisplayPczt ;
17
21
18
22
#[ no_mangle]
19
23
pub extern "C" fn derive_zcash_ufvk ( seed : PtrBytes , seed_len : u32 ) -> * mut SimpleResponse < c_char > {
@@ -26,11 +30,16 @@ pub extern "C" fn derive_zcash_ufvk(seed: PtrBytes, seed_len: u32) -> *mut Simpl
26
30
}
27
31
28
32
#[ no_mangle]
29
- pub extern "C" fn calculate_zcash_seed_fingerprint ( seed : PtrBytes , seed_len : u32 ) -> * mut SimpleResponse < u8 > {
33
+ pub extern "C" fn calculate_zcash_seed_fingerprint (
34
+ seed : PtrBytes ,
35
+ seed_len : u32 ,
36
+ ) -> * mut SimpleResponse < u8 > {
30
37
let seed = unsafe { slice:: from_raw_parts ( seed, seed_len as usize ) } ;
31
38
let sfp = calculate_seed_fingerprint ( seed) ;
32
39
match sfp {
33
- Ok ( bytes) => SimpleResponse :: success ( Box :: into_raw ( Box :: new ( bytes) ) as * mut u8 ) . simple_c_ptr ( ) ,
40
+ Ok ( bytes) => {
41
+ SimpleResponse :: success ( Box :: into_raw ( Box :: new ( bytes) ) as * mut u8 ) . simple_c_ptr ( )
42
+ }
34
43
Err ( e) => SimpleResponse :: from ( e) . simple_c_ptr ( ) ,
35
44
}
36
45
}
@@ -46,3 +55,54 @@ pub extern "C" fn generate_zcash_default_address(
46
55
Err ( e) => SimpleResponse :: from ( e) . simple_c_ptr ( ) ,
47
56
}
48
57
}
58
+
59
+ #[ no_mangle]
60
+ pub extern "C" fn parse_zcash_tx (
61
+ tx : PtrUR ,
62
+ ufvk : PtrString ,
63
+ ) -> Ptr < TransactionParseResult < DisplayPczt > > {
64
+ TransactionParseResult :: success ( mock_parsed_pczt ( ) . c_ptr ( ) ) . c_ptr ( )
65
+ }
66
+
67
+ fn mock_parsed_pczt ( ) -> DisplayPczt {
68
+ let parsed = ParsedPczt :: new (
69
+ Some ( ParsedTransparent :: new (
70
+ vec ! [ ParsedFrom :: new(
71
+ "t1QN3Kxh5wPFDi9ZPrTCgMVY5X4Rz96LkVC" . to_string( ) ,
72
+ "1 ZEC" . to_string( ) ,
73
+ 1 ,
74
+ true ,
75
+ ) ] ,
76
+ vec ! [ ParsedTo :: new(
77
+ "t1QN3Kxh5wPFDi9ZPrTCgMVY5X4Rz96LkVC" . to_string( ) ,
78
+ "1 ZEC" . to_string( ) ,
79
+ 1 ,
80
+ false ,
81
+ true ,
82
+ None ,
83
+ ) ] ,
84
+ ) ) ,
85
+ Some ( ParsedOrchard :: new (
86
+ vec ! [ ParsedFrom :: new(
87
+ "u13axqdhqadqf3aua82uvnp8wle5vf8fgvnxhzr8nd2kpc23d3d06r25cgzsx4gz8gastt8lcqz4v2kyfdj0zvlkhv4vjudlxsrvprx48y" . to_string( ) ,
88
+ "1 ZEC" . to_string( ) ,
89
+ 1 ,
90
+ true ,
91
+ ) ] ,
92
+ vec ! [
93
+ ParsedTo :: new(
94
+ "u13axqdhqadqf3aua82uvnp8wle5vf8fgvnxhzr8nd2kpc23d3d06r25cgzsx4gz8gastt8lcqz4v2kyfdj0zvlkhv4vjudlxsrvprx48y" . to_string( ) ,
95
+ "1 ZEC" . to_string( ) ,
96
+ 1 ,
97
+ false ,
98
+ true ,
99
+ Some ( "this is a memo" . to_string( ) ) ,
100
+ ) ,
101
+ ParsedTo :: new( "u13axqdhqadqf3aua82uvnp8wle5vf8fgvnxhzr8nd2kpc23d3d06r25cgzsx4gz8gastt8lcqz4v2kyfdj0zvlkhv4vjudlxsrvprx48y" . to_string( ) , "1 ZEC" . to_string( ) , 1 , true , true , None ) ,
102
+ ParsedTo :: new( "u13axqdhqadqf3aua82uvnp8wle5vf8fgvnxhzr8nd2kpc23d3d06r25cgzsx4gz8gastt8lcqz4v2kyfdj0zvlkhv4vjudlxsrvprx48y" . to_string( ) , "1 ZEC" . to_string( ) , 1 , false , false , None ) ,
103
+ ] ,
104
+ ) ) ,
105
+ "2 ZEC" . to_string ( ) ,
106
+ ) ;
107
+ DisplayPczt :: from ( & parsed)
108
+ }
0 commit comments