Skip to content

Commit 24ab478

Browse files
committed
feat: zcash basic transaction view
1 parent e1b7dca commit 24ab478

File tree

14 files changed

+344
-23
lines changed

14 files changed

+344
-23
lines changed

rust/apps/zcash/src/pczt/parse.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ pub fn parse_pczt(
8686
my_output_value = orchard
8787
.get_to()
8888
.iter()
89-
.filter(|v| v.get_is_mine()&&!v.get_is_change())
89+
.filter(|v| v.get_visible()&&!v.get_is_change())
9090
.fold(0, |acc, to| acc + to.get_amount());
9191
Some(())
9292
});
@@ -100,7 +100,7 @@ pub fn parse_pczt(
100100
my_output_value += transparent
101101
.get_to()
102102
.iter()
103-
.filter(|v| v.get_is_mine()&&!v.get_is_change())
103+
.filter(|v| v.get_visible()&&!v.get_is_change())
104104
.fold(0, |acc, to| acc + to.get_amount());
105105
Some(())
106106
});

rust/apps/zcash/src/pczt/structs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl_public_struct!(ParsedTo {
3434
value: String,
3535
amount: u64,
3636
is_change: bool,
37-
is_mine: bool,
37+
visible: bool,
3838
memo: Option<String>
3939
});
4040

rust/rust_c/src/common/src/ur.rs

+2
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ pub enum ViewType {
238238
#[cfg(feature = "multi-coins")]
239239
TonSignProof,
240240
#[cfg(feature = "multi-coins")]
241+
ZcashTx,
242+
#[cfg(feature = "multi-coins")]
241243
AptosTx,
242244
WebAuthResult,
243245
#[cfg(feature = "multi-coins")]

rust/rust_c/src/zcash/src/lib.rs

+68-8
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,21 @@ extern crate alloc;
33

44
pub mod structs;
55

6-
use core::slice;
6+
use core::{ptr::null_mut, slice};
77

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+
};
1013
use common_rust_c::{
11-
structs::{Response, SimpleResponse},
12-
types::{PtrBytes, PtrString},
14+
structs::{Response, SimpleResponse, TransactionParseResult},
15+
types::{Ptr, PtrBytes, PtrString, PtrUR},
1316
utils::{convert_c_char, recover_c_char},
1417
};
15-
use keystore::algorithms::zcash::{self, calculate_seed_fingerprint, derive_ufvk};
1618
use cty::c_char;
19+
use keystore::algorithms::zcash::{self, calculate_seed_fingerprint, derive_ufvk};
20+
use structs::DisplayPczt;
1721

1822
#[no_mangle]
1923
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
2630
}
2731

2832
#[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> {
3037
let seed = unsafe { slice::from_raw_parts(seed, seed_len as usize) };
3138
let sfp = calculate_seed_fingerprint(seed);
3239
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+
}
3443
Err(e) => SimpleResponse::from(e).simple_c_ptr(),
3544
}
3645
}
@@ -46,3 +55,54 @@ pub extern "C" fn generate_zcash_default_address(
4655
Err(e) => SimpleResponse::from(e).simple_c_ptr(),
4756
}
4857
}
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+
}

rust/rust_c/src/zcash/src/structs.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ pub struct DisplayTo {
8585
pub address: PtrString,
8686
pub value: PtrString,
8787
pub is_change: bool,
88-
pub is_mine: bool,
88+
pub visible: bool,
8989
pub memo: PtrString,
9090
}
9191

@@ -95,7 +95,7 @@ impl From<&ParsedTo> for DisplayTo {
9595
address: convert_c_char(to.get_address()),
9696
value: convert_c_char(to.get_value()),
9797
is_change: to.get_is_change(),
98-
is_mine: to.get_is_mine(),
98+
visible: to.get_visible(),
9999
memo: to.get_memo().map(convert_c_char).unwrap_or(null_mut()),
100100
}
101101
}

src/ui/gui_analyze/gui_analyze.c

+7-3
Original file line numberDiff line numberDiff line change
@@ -300,12 +300,12 @@ const static GuiAnalyze_t g_analyzeArray[] = {
300300
},
301301
{
302302
REMAPVIEW_ZCASH,
303-
#ifndef COMPILE_SIMULATOR
304-
"{\"name\":\"ton_page\",\"type\":\"tabview\",\"pos\":[36,0],\"size\":[408,900],\"bg_color\":0,\"children\":[{\"type\":\"tabview_child\",\"index\":1,\"tab_name\":\"Overview\",\"font\":\"openSansEnIllustrate\",\"children\":[{\"type\":\"custom_container\",\"bg_color\":0,\"bg_opa\":0,\"pos\":[0,12],\"custom_show_func\":\"GuiTonTxOverview\"}]},{\"type\":\"tabview_child\",\"index\":2,\"tab_name\":\"Raw Data\",\"text_color\":16777215,\"font\":\"openSansEnIllustrate\",\"children\":[{\"type\":\"custom_container\",\"bg_color\":0,\"bg_opa\":0,\"pos\":[0,12],\"custom_show_func\":\"GuiTonTxRawData\"}]}]}",
303+
#ifndef COMPILE_SIMULATOR
304+
"{\"name\":\"zcash_page\",\"type\":\"custom_container\",\"pos\":[36,0],\"size\":[408,900],\"bg_color\":0,\"custom_show_func\":\"GuiZcashOverview\"}",
305305
#else
306306
PC_SIMULATOR_PATH "/page_zcash.json",
307307
#endif
308-
GuiGetTonProofGUIData,
308+
GuiGetZcashGUIData,
309309
NULL,
310310
FreeArMemory,
311311
}
@@ -1339,6 +1339,8 @@ GetCustomContainerFunc GuiTemplateCustomFunc(char *funcName)
13391339
return GuiStellarHashNotice;
13401340
} else if (!strcmp(funcName, "GuiTonTxOverview")) {
13411341
return GuiTonTxOverview;
1342+
} else if (!strcmp(funcName, "GuiZcashOverview")) {
1343+
return GuiZcashOverview;
13421344
} else if (!strcmp(funcName, "GuiTonTxRawData")) {
13431345
return GuiTonTxRawData;
13441346
} else if (!strcmp(funcName, "GuiTonProofOverview")) {
@@ -1760,6 +1762,8 @@ GuiRemapViewType ViewTypeReMap(uint8_t viewType)
17601762
return REMAPVIEW_TON;
17611763
case TonSignProof:
17621764
return REMAPVIEW_TON_SIGNPROOF;
1765+
case ZcashTx:
1766+
return REMAPVIEW_ZCASH;
17631767
#endif
17641768
default:
17651769
return REMAPVIEW_BUTT;

src/ui/gui_chain/gui_chain.c

+2
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ GuiChainCoinType ViewTypeToChainTypeSwitch(uint8_t ViewType)
118118
case TonTx:
119119
case TonSignProof:
120120
return CHAIN_TON;
121+
case ZcashTx:
122+
return CHAIN_ZCASH;
121123
#endif
122124
default:
123125
return CHAIN_BUTT;

src/ui/gui_chain/gui_chain.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "gui_ar.h"
1616
#include "gui_stellar.h"
1717
#include "gui_ton.h"
18+
#include "gui_zcash.h"
1819
#endif
1920

2021
typedef void (*SetChainDataFunc)(void *resultData, void *multiResultData, bool multi);
@@ -24,7 +25,6 @@ typedef enum {
2425
CHAIN_BTC,
2526
#ifndef BTC_ONLY
2627
CHAIN_ETH,
27-
CHAIN_ZEC,
2828
CHAIN_SOL,
2929
CHAIN_BNB,
3030
CHAIN_HNT,
@@ -74,6 +74,7 @@ typedef enum {
7474
CHAIN_UMEE,
7575
CHAIN_QCK,
7676
CHAIN_TGD,
77+
CHAIN_ZCASH,
7778

7879
#endif
7980
CHAIN_BUTT,

0 commit comments

Comments
 (0)