Skip to content

Commit 7b5d2f1

Browse files
authored
Merge pull request #1578 from KeystoneHQ/fix/avax_bugs
fix avax bugs
2 parents 6a66cd7 + 1cc30d6 commit 7b5d2f1

30 files changed

+7737
-7584
lines changed

images/walletList/walletListCore.png

5.74 KB
Loading

rust/apps/avalanche/src/lib.rs

+2-7
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,14 @@
44
#[allow(unused_imports)]
55
#[macro_use]
66
extern crate alloc;
7-
use alloc::{
8-
string::{String},
9-
vec::Vec,
10-
};
7+
use alloc::{string::String, vec::Vec};
118

129
pub use address::get_address;
1310
use bytes::{Buf, Bytes};
1411
use transactions::tx_header::Header;
1512

1613
use crate::errors::{AvaxError, Result};
17-
use core::{
18-
convert::TryFrom,
19-
};
14+
use core::convert::TryFrom;
2015

2116
pub mod constants;
2217
pub mod errors;

rust/apps/avalanche/src/transactions/P_chain/add_permissionless_validator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ mod tests {
130130
#[test]
131131
fn test_add_permissionless_validator() {
132132
// 23HbZUQ7ijjrDHfqnjKpd4MTMRY18Gc2JxCz79ZBwZAsCLfntb
133-
let input_bytes = "000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000070000000005e57a370000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec9206000000020033b7653ffbf19a2352591e8b6aea8e7c75f38d8e8f5f781cf15aad8425010a000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b9ab9d9000000010000000029ec95b1c9df6cd2598852d78fea7766c1aece1a7b5d24f6cf58adc98107f927000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b8ab46a0000000100000000000000009e843011540909cc62c64dc85a8a1507813777410000000067614160000000006851245000000000713fb30000000000000000000000000000000000000000000000000000000000000000000000001c87c87cef2e92bface778c711c752168a6e858d58ba62463e8bab336f9b05c98c695acf3c7da02b05c667ce5627e63a60ad53ad7da84734084394dedf6b3c4bb6c85922c2b08b09c55508d49d348ad0dcd9678be58197fef69bad862b1d170f4b0c24f189d9d4b6b5103d28b5e8146d305e28d3dcfb3279f089c7152535a24800c7a1a212868a5c76e3559ea9d4a64d9d000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa0000000700000000713fb3000000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec92060000000b0000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec92060000000b0000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec92060000c350000000020000000900000001b52c42f9bfd2c417d2e4c3251f3ea17ce969ae0579011989a57a3e023793d2226103151470494540b3386a10907ec483c6678ae0fd2681b22a57025632321407000000000900000001b52c42f9bfd2c417d2e4c3251f3ea17ce969ae0579011989a57a3e023793d2226103151470494540b3386a10907ec483c6678ae0fd2681b22a5702563232140700f62a80bf";
133+
let input_bytes = "000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000070000000005e57a370000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec9206000000020033b7653ffbf19a2352591e8b6aea8e7c75f38d8e8f5f781cf15aad8425010a000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b9ab9d9000000010000000029ec95b1c9df6cd2598852d78fea7766c1aece1a7b5d24f6cf58adc98107f927000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b8ab46a0000000100000000000000009e843011540909cc62c64dc85a8a1507813777410000000067614160000000006851245000000000713fb30000000000000000000000000000000000000000000000000000000000000000000000001c87c87cef2e92bface778c711c752168a6e858d58ba62463e8bab336f9b05c98c695acf3c7da02b05c667ce5627e63a60ad53ad7da84734084394dedf6b3c4bb6c85922c2b08b09c55508d49d348ad0dcd9678be58197fef69bad862b1d170f4b0c24f189d9d4b6b5103d28b5e8146d305e28d3dcfb3279f089c7152535a24800c7a1a212868a5c76e3559ea9d4a64d9d000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa0000000700000000713fb3000000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec92060000000b0000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec92060000000b0000000000000000000000010000000161cd7d26c72edc631d4114d6eef2c4e069ec92060000c350";
134134
let mut bytes = Bytes::from(hex::decode(input_bytes).expect("Failed to decode hex string"));
135135
let result = AddPermissLessionValidatorTx::try_from(bytes.clone()).unwrap();
136136
assert_eq!(

rust/apps/avalanche/src/transactions/import.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl AvaxTxInfo for ImportTx {
4040
let method = match self.source_chain {
4141
X_BLOCKCHAIN_ID | X_TEST_BLOCKCHAIN_ID => "Sending from X-Chain",
4242
P_BLOCKCHAIN_ID => "Sending from P-Chain",
43-
C_BLOCKCHAIN_ID => "Sending from C-Chain",
43+
C_BLOCKCHAIN_ID | C_TEST_BLOCKCHAIN_ID => "Sending from C-Chain",
4444
_ => "Unknown",
4545
};
4646

@@ -52,8 +52,8 @@ impl AvaxTxInfo for ImportTx {
5252
}
5353

5454
impl ImportTx {
55-
fn get_base_tx(&self) -> &BaseTx {
56-
&self.base_tx
55+
pub fn get_source_chain_id(&self) -> [u8; BLOCKCHAIN_ID_LEN] {
56+
self.source_chain
5757
}
5858
}
5959

rust/apps/avalanche/src/transactions/structs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ pub trait AvaxTxInfo {
7272
fn get_output_amount(&self, address: String) -> u64 {
7373
self.get_outputs_addresses()
7474
.iter()
75-
.find(|info| {info.address[0] == address})
75+
.find(|info| info.address[0] == address)
7676
.map(|info| info.amount)
7777
.unwrap_or(0)
7878
}

rust/apps/wallets/src/core_wallet.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ fn get_device_id(serial_number: &str) -> String {
2222
hex::encode(&sha256(&sha256(serial_number.as_bytes()))[0..20])
2323
}
2424

25-
const AVAX_STANDARD_PREFIX: &str = "m/44'/60'/0'";
26-
const AVAX_X_P_PREFIX: &str = "m/44'/9000'/0'";
25+
const AVAX_STANDARD_PREFIX: &str = "44'/60'/0'";
26+
const AVAX_X_P_PREFIX: &str = "44'/9000'/0'";
2727

2828
pub fn generate_crypto_multi_accounts(
2929
master_fingerprint: [u8; 4],

rust/rust_c/src/avalanche/mod.rs

+19-18
Original file line numberDiff line numberDiff line change
@@ -172,36 +172,37 @@ pub fn determine_derivation_path(
172172
wallet_index: u64,
173173
) -> Result<DerivationPath, AvaxError> {
174174
let wallet_suffix = format!("/0/{}", wallet_index);
175+
let blockchain_id = get_avax_tx_header(sign_request.get_tx_data())?.get_blockchain_id();
176+
let is_c_chain = |id: &[u8; 32]| *id == C_BLOCKCHAIN_ID || *id == C_TEST_BLOCKCHAIN_ID;
175177

176178
let (base_path, full_path) = match type_id {
177179
TypeId::CchainExportTx => (
178180
C_CHAIN_PREFIX,
179181
format!("{}{}", C_CHAIN_PREFIX, wallet_suffix),
180182
),
181-
TypeId::BaseTx => {
182-
let blockchain_id = get_avax_tx_header(sign_request.get_tx_data())?.get_blockchain_id();
183-
184-
if blockchain_id == C_BLOCKCHAIN_ID || blockchain_id == C_TEST_BLOCKCHAIN_ID {
185-
(
186-
C_CHAIN_PREFIX,
187-
format!("{}{}", C_CHAIN_PREFIX, wallet_suffix),
188-
)
183+
TypeId::XchainImportTx | TypeId::PchainImportTx => {
184+
let source_chain_id =
185+
parse_avax_tx::<ImportTx>(sign_request.get_tx_data())?.get_source_chain_id();
186+
let prefix = if is_c_chain(&source_chain_id) {
187+
C_CHAIN_PREFIX
189188
} else {
190-
(
191-
X_P_CHAIN_PREFIX,
192-
format!("{}{}", X_P_CHAIN_PREFIX, wallet_suffix),
193-
)
194-
}
189+
X_P_CHAIN_PREFIX
190+
};
191+
(prefix, format!("{}{}", prefix, wallet_suffix))
192+
}
193+
_ => {
194+
let prefix = if is_c_chain(&blockchain_id) {
195+
C_CHAIN_PREFIX
196+
} else {
197+
X_P_CHAIN_PREFIX
198+
};
199+
(prefix, format!("{}{}", prefix, wallet_suffix))
195200
}
196-
_ => (
197-
X_P_CHAIN_PREFIX,
198-
format!("{}{}", X_P_CHAIN_PREFIX, wallet_suffix),
199-
),
200201
};
201202

202203
Ok(DerivationPath {
203204
base_path: base_path.to_string(),
204-
full_path: full_path,
205+
full_path,
205206
})
206207
}
207208

rust/rust_c/src/avalanche/structs.rs

+11-6
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,20 @@ impl_c_ptr!(DisplayAvaxFromToInfo);
7272
impl DisplayAvaxFromToInfo {
7373
fn from_index(value: &AvaxFromToInfo, wallet_index: u64, from_address: String) -> Self {
7474
let address = value.address.get(0).unwrap().clone();
75+
let is_change = address == from_address;
76+
let path = if is_change == false {
77+
null_mut()
78+
} else {
79+
convert_c_char(format!("{}/0/{}", value.path_prefix, wallet_index))
80+
};
7581
DisplayAvaxFromToInfo {
7682
address: convert_c_char(address.clone()),
7783
amount: convert_c_char(format!(
7884
"{} AVAX",
7985
value.amount as f64 / NAVAX_TO_AVAX_RATIO
8086
)),
81-
path: convert_c_char(format!("{}/0/{}", value.path_prefix, wallet_index)),
82-
is_change: address == from_address,
87+
is_change,
88+
path,
8389
}
8490
}
8591
}
@@ -147,10 +153,9 @@ impl DisplayTxAvaxData {
147153
}
148154
.c_ptr(),
149155
amount: convert_c_char(format!(
150-
"{} AVAX",value.get_output_amount(
151-
from_address.clone()
152-
) as f64
153-
/ NAVAX_TO_AVAX_RATIO)),
156+
"{} AVAX",
157+
value.get_output_amount(from_address.clone()) as f64 / NAVAX_TO_AVAX_RATIO
158+
)),
154159

155160
total_input_amount: convert_c_char(format!(
156161
"{} AVAX",

src/ui/gui_analyze/gui_resolve_ur.c

-5
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,9 @@ static SetChainData_t g_chainViewArray[] = {
5858

5959
void HandleDefaultViewType(URParseResult *urResult, URParseMultiResult *urMultiResult, UrViewType_t urViewType, bool is_multi)
6060
{
61-
printf("%s %d.\n", __func__, __LINE__);
6261
GuiRemapViewType viewType = ViewTypeReMap(urViewType.viewType);
63-
printf("%s %d.\n", __func__, __LINE__);
64-
printf("viewType=%d\r\n", viewType);
6562
for (int i = 0; i < NUMBER_OF_ARRAYS(g_chainViewArray); i++) {
6663
if (g_chainViewArray[i].chain == viewType) {
67-
printf("%s %d.\n", __func__, __LINE__);
68-
printf("g_chainViewArray[i].type=%d\r\n", g_chainViewArray[i].chain);
6964
g_chainViewArray[viewType].func(urResult, urMultiResult, is_multi);
7065
break;
7166
}

0 commit comments

Comments
 (0)