What changed, and why it matters
This commit adds support for Litecoin (LTC) native SegWit addresses (the 'ltc1...' format) to the Keystone 3 hardware wallet firmware. It is a feature addition: it lets users generate and display a new type of LTC address and export the corresponding public key. There is no indication in the commit that it fixes a security bug or vulnerability.
No security action required; review as normal feature code. If auditing, verify that the new LTC native SegWit path is handled consistently in transaction signing and that address generation matches Litecoin mainnet expectations.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change extends the existing Bitcoin/Litecoin address-derivation code to handle BIP84 path m/84’/2’/0’ for Litecoin native SegWit (P2WPKH). It adds a new xpub type (XPUB_TYPE_LTC_NATIVE_SEGWIT), wires it into the wallet-connect export list, updates the UI receive widget to let users choose between nested and native SegWit for LTC, and adds localized tutorial strings. A small refactor removes a COMPILE_SIMULATOR guard around address highlighting and converts if/else chains to switch statements, but these are code-quality changes, not security fixes.
Changed components
Litecoin address derivation (rust/apps/bitcoin)Keystone Connect wallet export (rust/apps/wallets)Account public key table (src/crypto/account_public_info)UTXO receive UI widget (src/ui/gui_widgets/gui_utxo_receive_widgets.c)Tutorial and i18n stringsInspect captured patch +163 / −31
diff --git a/rust/apps/bitcoin/src/addresses/address.rs b/rust/apps/bitcoin/src/addresses/address.rs
index ae81353..d38fff3 100644
--- a/rust/apps/bitcoin/src/addresses/address.rs
+++ b/rust/apps/bitcoin/src/addresses/address.rs
@@ -56,7 +56,10 @@ impl Address {
pub fn p2wpkh(pk: &PublicKey, network: Network) -> Result<Address, BitcoinError> {
match network {
- Network::Bitcoin | Network::BitcoinTestnet | Network::AvaxBtcBridge => {
+ Network::Bitcoin
+ | Network::BitcoinTestnet
+ | Network::AvaxBtcBridge
+ | Network::Litecoin => {
let payload = Payload::Segwit {
witness_program: WitnessProgram::p2wpkh(
&CompressedPublicKey::try_from(*pk).map_err(|e| {
diff --git a/rust/apps/bitcoin/src/addresses/mod.rs b/rust/apps/bitcoin/src/addresses/mod.rs
index a77734e..3b8581d 100644
--- a/rust/apps/bitcoin/src/addresses/mod.rs
+++ b/rust/apps/bitcoin/src/addresses/mod.rs
@@ -39,6 +39,7 @@ pub fn get_address(hd_path: String, extended_pub_key: &String) -> Result<String>
"m/84'/0'/0'" => Address::p2wpkh(&compressed_ecdsa_pubkey, Network::Bitcoin),
"m/84'/1'/0'" => Address::p2wpkh(&compressed_ecdsa_pubkey, Network::BitcoinTestnet),
"m/49'/2'/0'" => Address::p2shp2wpkh(&compressed_ecdsa_pubkey, Network::Litecoin),
+ "m/84'/2'/0'" => Address::p2wpkh(&compressed_ecdsa_pubkey, Network::Litecoin),
"m/44'/3'/0'" => Address::p2pkh(&compressed_ecdsa_pubkey, Network::Dogecoin),
"m/44'/5'/0'" => Address::p2pkh(&compressed_ecdsa_pubkey, Network::Dash),
"m/44'/145'/0'" => Address::p2pkh(&compressed_ecdsa_pubkey, Network::BitcoinCash),
@@ -151,6 +152,17 @@ mod tests {
assert_eq!(address, "M7wtsL7wSHDBJVMWWhtQfTMSYYkyooAAXM")
}
+ #[test]
+ fn test_ltc_p2wpkh_address() {
+ let extended_pubkey = "zpub6rPo5mF47z5coVm5rvWv7fv181awb7Vckn5Cf3xQXBVKu18kuBHDhNi1Jrb4br6vVD3ZbrnXemEsWJoR18mZwkUdzwD8TQnHDUCGxqZ6swA";
+ let address = get_address(
+ String::from("m/84'/2'/0'/0/0"),
+ &extended_pubkey.to_string(),
+ )
+ .unwrap();
+ assert_eq!(address, "ltc1qjmxnz78nmc8nq77wuxh25n2es7rzm5c2rkk4wh")
+ }
+
#[test]
fn test_btc_p2tr_no_script_address() {
let extended_pubkey = "xpub6Cq9mdT8xwFe9LYQnt9y1hJXTyo7KQJM8pRH6K95F1mbELzgm825m3hyAZ97vsUV8Xh7VRwu7bKuLZEmUV1ABqCRQqFzZHAsfaJXTYSY1cf";
diff --git a/rust/apps/wallets/src/keystone_connect.rs b/rust/apps/wallets/src/keystone_connect.rs
index 4cf9236..074597b 100644
--- a/rust/apps/wallets/src/keystone_connect.rs
+++ b/rust/apps/wallets/src/keystone_connect.rs
@@ -32,6 +32,8 @@ const ETH_LEDGER_LIVE_PREFIX: &str = "44'/60'"; //overlap with ETH_STANDARD at 0
const TRX_PREFIX: &str = "44'/195'/0'";
const DOGE_LEGACY_PREFIX: &str = "44'/3'/0'";
const XRP_PREFIX: &str = "44'/144'/0'";
+const LTC_PREFIX: &str = "49'/2'/0'";
+const LTC_NATIVE_SEGWIT_PREFIX: &str = "84'/2'/0'";
pub fn generate_crypto_multi_accounts(
master_fingerprint: [u8; 4],
@@ -50,6 +52,8 @@ pub fn generate_crypto_multi_accounts(
TRX_PREFIX.to_string(),
DOGE_LEGACY_PREFIX.to_string(),
XRP_PREFIX.to_string(),
+ LTC_PREFIX.to_string(),
+ LTC_NATIVE_SEGWIT_PREFIX.to_string(),
];
for ele in extended_public_keys {
match ele.get_path() {
diff --git a/src/crypto/account_public_info.c b/src/crypto/account_public_info.c
index 1018952..ddfee2b 100644
--- a/src/crypto/account_public_info.c
+++ b/src/crypto/account_public_info.c
@@ -307,6 +307,7 @@ static const ChainItem_t g_chainTable[] = {
{XPUB_TYPE_BTC_TAPROOT, SECP256K1, "btc_taproot", "M/86'/0'/0'" },
#ifdef WEB3_VERSION
{XPUB_TYPE_LTC, SECP256K1, "ltc", "M/49'/2'/0'" },
+ {XPUB_TYPE_LTC_NATIVE_SEGWIT, SECP256K1, "ltc_native_segwit", "M/84'/2'/0'" },
{XPUB_TYPE_DOGE, SECP256K1, "doge", "M/44'/3'/0'" },
{XPUB_TYPE_DASH, SECP256K1, "dash", "M/44'/5'/0'" },
{XPUB_TYPE_BCH, SECP256K1, "bch", "M/44'/145'/0'" },
diff --git a/src/crypto/account_public_info.h b/src/crypto/account_public_info.h
index 8193f0b..411fdd8 100644
--- a/src/crypto/account_public_info.h
+++ b/src/crypto/account_public_info.h
@@ -20,6 +20,7 @@ typedef enum {
XPUB_TYPE_BTC_TAPROOT,
#ifdef WEB3_VERSION
XPUB_TYPE_LTC,
+ XPUB_TYPE_LTC_NATIVE_SEGWIT,
XPUB_TYPE_DOGE,
XPUB_TYPE_DASH,
XPUB_TYPE_BCH,
diff --git a/src/ui/gui_wallet/multi/web3/gui_wallet.c b/src/ui/gui_wallet/multi/web3/gui_wallet.c
index 31ddb57..fcdce0e 100644
--- a/src/ui/gui_wallet/multi/web3/gui_wallet.c
+++ b/src/ui/gui_wallet/multi/web3/gui_wallet.c
@@ -470,6 +470,8 @@ UREncodeResult *GuiGetKeystoneConnectWalletData(void)
{.path = GetXPubPath(XPUB_TYPE_TRX), .chainType = XPUB_TYPE_TRX},
{.path = GetXPubPath(XPUB_TYPE_DOGE), .chainType = XPUB_TYPE_DOGE},
{.path = GetXPubPath(XPUB_TYPE_XRP), .chainType = XPUB_TYPE_XRP},
+ {.path = GetXPubPath(XPUB_TYPE_LTC), .chainType = XPUB_TYPE_LTC},
+ {.path = GetXPubPath(XPUB_TYPE_LTC_NATIVE_SEGWIT), .chainType = XPUB_TYPE_LTC_NATIVE_SEGWIT},
};
ExtendedPublicKey keys[NUMBER_OF_ARRAYS(chainPaths)];
uint8_t mfp[4] = {0};
diff --git a/src/ui/gui_widgets/gui_global_resources.c b/src/ui/gui_widgets/gui_global_resources.c
index 8259391..6272e4a 100644
--- a/src/ui/gui_widgets/gui_global_resources.c
+++ b/src/ui/gui_widgets/gui_global_resources.c
@@ -9,6 +9,7 @@ static char **g_avaxDerivationPathDesc = NULL;
static char **g_solDerivationPathDesc = NULL;
static char **g_adaDerivationPathDesc = NULL;
static char **g_btcDerivationPathDesc = NULL;
+static char **g_ltcDerivationPathDesc = NULL;
#ifdef BTC_ONLY
static char **g_btcTestNetDerivationPathDesc = NULL;
#endif
@@ -57,33 +58,37 @@ void DerivationPathDescsInit(void)
}
g_avaxDerivationPathDesc[AVAX_C_CHAIN] = (char *)_("chain_path_avax_c_desc");
g_avaxDerivationPathDesc[AVAX_X_P_CHAIN] = (char *)_("chain_path_avax_x_p_desc");
+
+ if (g_ltcDerivationPathDesc == NULL) {
+ g_ltcDerivationPathDesc = SRAM_MALLOC(4 * ETH_DERIVATION_PATH_MAX_LEN);
+ }
+ g_ltcDerivationPathDesc[LTC_NESTED_SEGWIT] = (char *)_("derivation_path_ltc_nested_desc");
+ g_ltcDerivationPathDesc[LTC_NATIVE_SEGWIT] = (char *)_("derivation_path_ltc_native_desc");
}
char **GetDerivationPathDescs(uint8_t index)
{
DerivationPathDescsInit();
- if (index == ETH_DERIVATION_PATH_DESC) {
+ switch (index) {
+ case ETH_DERIVATION_PATH_DESC:
return (char **)g_ethDerivationPathDesc;
- }
-
- if (index == AVAX_DERIVATION_PATH_DESC) {
+ case AVAX_DERIVATION_PATH_DESC:
return (char **)g_avaxDerivationPathDesc;
- }
-
- if (index == SOL_DERIVATION_PATH_DESC) {
+ case SOL_DERIVATION_PATH_DESC:
return (char **)g_solDerivationPathDesc;
- }
- if (index == BTC_DERIVATION_PATH_DESC) {
+ case BTC_DERIVATION_PATH_DESC:
return (char **)g_btcDerivationPathDesc;
- }
- if (index == ADA_DERIVATION_PATH_DESC) {
+ case ADA_DERIVATION_PATH_DESC:
return (char **)g_adaDerivationPathDesc;
- }
+ case LTC_DERIVATION_PATH_DESC:
+ return (char **)g_ltcDerivationPathDesc;
#ifdef BTC_ONLY
- if (index == BTC_TEST_NET_DERIVATION_PATH_DESC) {
+ case BTC_TEST_NET_DERIVATION_PATH_DESC:
return (char **)g_btcTestNetDerivationPathDesc;
- }
#endif
+ default:
+ break;
+ }
return NULL;
}
diff --git a/src/ui/gui_widgets/gui_global_resources.h b/src/ui/gui_widgets/gui_global_resources.h
index 29f2142..3d851c1 100644
--- a/src/ui/gui_widgets/gui_global_resources.h
+++ b/src/ui/gui_widgets/gui_global_resources.h
@@ -33,12 +33,18 @@ typedef enum {
BTC_LEGACY,
} BTC_PATH_TYPE;
+typedef enum {
+ LTC_NESTED_SEGWIT,
+ LTC_NATIVE_SEGWIT,
+} LTC_PATH_TYPE;
+
typedef enum {
ETH_DERIVATION_PATH_DESC,
SOL_DERIVATION_PATH_DESC,
BTC_DERIVATION_PATH_DESC,
ADA_DERIVATION_PATH_DESC,
AVAX_DERIVATION_PATH_DESC,
+ LTC_DERIVATION_PATH_DESC,
#ifdef BTC_ONLY
BTC_TEST_NET_DERIVATION_PATH_DESC,
#endif
diff --git a/src/ui/gui_widgets/gui_tutorial_widgets.c b/src/ui/gui_widgets/gui_tutorial_widgets.c
index 74db34a..dc0f13d 100644
--- a/src/ui/gui_widgets/gui_tutorial_widgets.c
+++ b/src/ui/gui_widgets/gui_tutorial_widgets.c
@@ -133,6 +133,15 @@ static void TutorialsInit()
g_tutorials[TUTORIAL_TON_MNEMONIC].tutorials[0].qrTitle = _("tutorial_ton_mnemonic_title");
g_tutorials[TUTORIAL_TON_MNEMONIC].tutorials[0].qrSubtitle = _("tutorial_ton_mnemonic_url");
g_tutorials[TUTORIAL_TON_MNEMONIC].tutorials[0].qrCode = _("tutorial_ton_mnemonic_url");
+
+ //TUTORIAL_LTC_RECEIVE
+ g_tutorials[TUTORIAL_LTC_RECEIVE].len = 1;
+ g_tutorials[TUTORIAL_LTC_RECEIVE].tutorials[0].title = _("receive_ltc_more_t_title1");
+ g_tutorials[TUTORIAL_LTC_RECEIVE].tutorials[0].desc = _("receive_ltc_more_t_desc1");
+ g_tutorials[TUTORIAL_LTC_RECEIVE].tutorials[0].link = _("learn_more");
+ g_tutorials[TUTORIAL_LTC_RECEIVE].tutorials[0].qrTitle = _("receive_ltc_more_t_title1");
+ g_tutorials[TUTORIAL_LTC_RECEIVE].tutorials[0].qrSubtitle = _("receive_more_t_qr_link");
+ g_tutorials[TUTORIAL_LTC_RECEIVE].tutorials[0].qrCode = _("receive_more_t_qr_link");
}
static void GuiOpenQRHintBox(Tutorial_t *tutorial)
diff --git a/src/ui/gui_widgets/gui_tutorial_widgets.h b/src/ui/gui_widgets/gui_tutorial_widgets.h
index 1f18cf8..7bc6ce6 100644
--- a/src/ui/gui_widgets/gui_tutorial_widgets.h
+++ b/src/ui/gui_widgets/gui_tutorial_widgets.h
@@ -10,8 +10,9 @@ typedef enum {
TUTORIAL_XMR_RECEIVE,
TUTORIAL_CHANGE_ENTROPY,
TUTORIAL_TON_MNEMONIC,
+ TUTORIAL_LTC_RECEIVE,
TUTORIAL_PASSPHRASE_LEARN_MORE,
-
+
TUTORIAL_LIST_INDEX_BUTT,
} TUTORIAL_LIST_INDEX_ENUM;
diff --git a/src/ui/gui_widgets/gui_utxo_receive_widgets.c b/src/ui/gui_widgets/gui_utxo_receive_widgets.c
index 2d27a64..dca6905 100644
--- a/src/ui/gui_widgets/gui_utxo_receive_widgets.c
+++ b/src/ui/gui_widgets/gui_utxo_receive_widgets.c
@@ -147,13 +147,19 @@ static UtxoReceiveWidgets_t g_utxoReceiveWidgets;
static UtxoReceiveTile g_utxoReceiveTileNow;
static bool g_gotoAddressValid = false;
#ifndef BTC_ONLY
-static const AddressSettingsItem_t g_addressSettings[] = {
+static const AddressSettingsItem_t g_mainNetAddressSettings[] = {
{"Native SegWit", "P2WPKH", "m/84'/0'/0'"},
{"Taproot", "P2TR", "m/86'/0'/0'"},
{"Nested SegWit", "P2SH-P2WPKH", "m/49'/0'/0'"},
{"Legacy", "P2PKH", "m/44'/0'/0'"},
};
-static uint32_t g_addressSettingsNum = sizeof(g_addressSettings) / sizeof(g_addressSettings[0]);
+
+static const AddressSettingsItem_t g_ltcAddressSettings[] = {
+ {"Nested SegWit", "P2SH-P2WPKH", "m/49'/2'/0'"},
+ {"Native SegWit", "P2WPKH", "m/84'/2'/0'"},
+};
+static const AddressSettingsItem_t *g_addressSettings = g_mainNetAddressSettings;
+static uint32_t g_addressSettingsNum = 0;
#else
static const AddressSettingsItem_t g_mainNetAddressSettings[] = {
{"Native SegWit", "P2WPKH", "m/84'/0'/0'"},
@@ -211,6 +217,12 @@ static void InitDerivationPathDesc(uint8_t chain)
switch (chain) {
case HOME_WALLET_CARD_BTC:
g_derivationPathDescs = GetDerivationPathDescs(BTC_DERIVATION_PATH_DESC);
+ g_addressSettingsNum = NUMBER_OF_ARRAYS(g_mainNetAddressSettings);
+ break;
+ case HOME_WALLET_CARD_LTC:
+ g_derivationPathDescs = GetDerivationPathDescs(LTC_DERIVATION_PATH_DESC);
+ g_addressSettingsNum = NUMBER_OF_ARRAYS(g_ltcAddressSettings);
+ break;
#ifdef BTC_ONLY
g_testNetderivationPathDescs = GetDerivationPathDescs(BTC_TEST_NET_DERIVATION_PATH_DESC);
#endif
@@ -307,6 +319,7 @@ static bool HasMoreBtn()
switch (g_chainCard) {
#ifdef WEB3_VERSION
case HOME_WALLET_CARD_LTC:
+ return true;
case HOME_WALLET_CARD_BCH:
case HOME_WALLET_CARD_DASH:
case HOME_WALLET_CARD_DOGE:
@@ -412,9 +425,11 @@ static void GuiCreateMoreWidgets(lv_obj_t *parent)
height = 132;
}
#else
- int height = 324;
- if (g_chainCard != HOME_WALLET_CARD_BTC) {
- height = 132;
+ int height = 132;
+ if (g_chainCard == HOME_WALLET_CARD_BTC) {
+ height = 324;
+ } else if (g_chainCard == HOME_WALLET_CARD_LTC) {
+ height = 208;
}
#endif
g_utxoReceiveWidgets.moreCont = GuiCreateHintBox(height);
@@ -442,6 +457,10 @@ static void GuiCreateMoreWidgets(lv_obj_t *parent)
ExportXpubHandler, NULL, true);
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 120 + 476);
break;
+ case HOME_WALLET_CARD_LTC:
+ btn = GuiCreateSelectButton(cont, _("receive_btc_more_address_settings"), &imgAddressType,
+ AddressSettingsHandler, NULL, true);
+ lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 120 + 476);
default:
break;
}
@@ -782,7 +801,6 @@ static void GuiCreateSwitchAddressButtons(lv_obj_t *parent)
static void Highlight(char *address, uint8_t highlightStart, uint8_t highlightEnd, char *coloredAddress, uint32_t maxLen)
{
-#ifndef COMPILE_SIMULATOR
uint8_t addressLength = strnlen_s(address, ADDRESS_MAX_LEN);
if (address == NULL || coloredAddress == NULL || highlightStart > highlightEnd || highlightEnd > addressLength) {
return;
@@ -798,7 +816,6 @@ static void Highlight(char *address, uint8_t highlightStart, uint8_t highlightEn
strcpy_s(afterHighlight, addressLength, &address[highlightEnd]);
snprintf_s(coloredAddress, maxLen, "%s#F5870A %s#%s", beforeHighlight, highlight, afterHighlight);
-#endif
}
#ifndef BTC_ONLY
@@ -812,7 +829,18 @@ static void RefreshDefaultAddress(void)
ChainType chainType;
chainType = GetChainTypeByIndex(g_selectType);
- uint8_t highlightEnd = (chainType == XPUB_TYPE_BTC_NATIVE_SEGWIT || chainType == XPUB_TYPE_BTC_TAPROOT) ? 4 : 1;
+ uint8_t highlightEnd = 0;
+ switch (chainType) {
+ case XPUB_TYPE_BTC_NATIVE_SEGWIT:
+ case XPUB_TYPE_BTC_TAPROOT:
+#ifdef WEB3_VERSION
+ case XPUB_TYPE_LTC_NATIVE_SEGWIT:
+#endif
+ highlightEnd = 4;
+ break;
+ default:
+ highlightEnd = 1;
+ }
ModelGetUtxoAddress(0, &addressDataItem);
CutAndFormatString(address, sizeof(address), addressDataItem.address, 24);
Highlight(address, 0, highlightEnd, highlightAddress, sizeof(highlightAddress));
@@ -919,6 +947,7 @@ static void GetChangePathLabelHint(char* hint, uint32_t maxLen)
{
switch (g_chainCard) {
case HOME_WALLET_CARD_BTC:
+ case HOME_WALLET_CARD_LTC:
snprintf_s(hint, maxLen, "%s", _("derivation_path_select_btc"));
return;
default:
@@ -931,6 +960,17 @@ static void GuiCreateAddressSettingsWidget(lv_obj_t *parent)
if (g_derivationPathDescs == NULL) {
return;
}
+ uint16_t contHeight = 411;
+#ifdef BTC_ONLY
+ g_addressSettings = GetIsTestNet() ? g_testNetAddressSettings : g_mainNetAddressSettings;
+#else
+ if (g_chainCard == HOME_WALLET_CARD_LTC) {
+ contHeight = 208;
+ g_addressSettings = g_ltcAddressSettings;
+ } else {
+ g_addressSettings = g_mainNetAddressSettings;
+ }
+#endif
lv_obj_t *cont, *line, *label;
static lv_point_t points[2] = {{0, 0}, {360, 0}};
char string[BUFFER_SIZE_64];
@@ -946,14 +986,11 @@ static void GuiCreateAddressSettingsWidget(lv_obj_t *parent)
lv_obj_set_style_text_opa(labelHint, LV_OPA_80, LV_PART_MAIN);
lv_obj_align(labelHint, LV_ALIGN_TOP_LEFT, 0, 0);
- cont = GuiCreateContainerWithParent(scrollCont, 408, 411);
+ cont = GuiCreateContainerWithParent(scrollCont, 408, contHeight);
lv_obj_align_to(cont, labelHint, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 24);
lv_obj_set_style_bg_color(cont, WHITE_COLOR, LV_PART_MAIN);
lv_obj_set_style_bg_opa(cont, LV_OPA_10 + LV_OPA_2, LV_PART_MAIN);
lv_obj_set_style_radius(cont, 24, LV_PART_MAIN);
-#ifdef BTC_ONLY
- g_addressSettings = GetIsTestNet() ? g_testNetAddressSettings : g_mainNetAddressSettings;
-#endif
for (uint32_t i = 0; i < g_addressSettingsNum; i++) {
label = GuiCreateTextLabel(cont, g_addressSettings[i].title);
lv_obj_align(label, LV_ALIGN_TOP_LEFT, 24, 20 + 103 * i);
@@ -1164,6 +1201,9 @@ static void TutorialHandler(lv_event_t *e)
if (g_chainCard == HOME_WALLET_CARD_BTC) {
TUTORIAL_LIST_INDEX_ENUM tIndex = TUTORIAL_BTC_RECEIVE;
GuiFrameOpenViewWithParam(&g_tutorialView, &tIndex, sizeof(tIndex));
+ } else if (g_chainCard == HOME_WALLET_CARD_LTC) {
+ TUTORIAL_LIST_INDEX_ENUM tIndex = TUTORIAL_LTC_RECEIVE;
+ GuiFrameOpenViewWithParam(&g_tutorialView, &tIndex, sizeof(tIndex));
}
}
@@ -1211,6 +1251,8 @@ static void AddressSettingsCheckHandler(lv_event_t *e)
lv_obj_t *checkBox = lv_event_get_target(e);
#ifdef BTC_ONLY
g_addressSettings = GetIsTestNet() ? g_testNetAddressSettings : g_mainNetAddressSettings;
+#else
+ g_addressSettings = g_chainCard == HOME_WALLET_CARD_LTC ? g_ltcAddressSettings : g_addressSettings;
#endif
for (uint32_t i = 0; i < g_addressSettingsNum; i++) {
UpdateAddrTypeCheckbox(i, checkBox == g_utxoReceiveWidgets.addressSettingsWidgets[i].checkBox);
@@ -1425,7 +1467,12 @@ static ChainType GetChainTypeByIndex(uint32_t index)
}
#ifdef WEB3_VERSION
case HOME_WALLET_CARD_LTC:
- return XPUB_TYPE_LTC;
+ if (index == 0) {
+ return XPUB_TYPE_LTC;
+ } else {
+ return XPUB_TYPE_LTC_NATIVE_SEGWIT;
+ }
+ break;
case HOME_WALLET_CARD_DASH:
return XPUB_TYPE_DASH;
case HOME_WALLET_CARD_BCH:
@@ -1465,12 +1512,14 @@ static void GetRootHdPath(char *hdPath, uint32_t maxLen)
return;
}
g_addressSettings = GetIsTestNet() ? g_testNetAddressSettings : g_mainNetAddressSettings;
+#else
+ g_addressSettings = g_chainCard == HOME_WALLET_CARD_LTC ? g_ltcAddressSettings : g_mainNetAddressSettings;
#endif
strcpy_s(hdPath, maxLen, g_addressSettings[addrType].path);
break;
#ifdef WEB3_VERSION
case HOME_WALLET_CARD_LTC:
- strcpy_s(hdPath, maxLen, g_chainPathItems[1].path);
+ strcpy_s(hdPath, maxLen, g_addressSettings[addrType].path);
break;
case HOME_WALLET_CARD_DASH:
strcpy_s(hdPath, maxLen, g_chainPathItems[2].path);
diff --git a/src/ui/lv_i18n/data.csv b/src/ui/lv_i18n/data.csv
index 263cb69..4855fe1 100644
--- a/src/ui/lv_i18n/data.csv
+++ b/src/ui/lv_i18n/data.csv
@@ -156,6 +156,8 @@ derivation_path,20,derivation_path_select_btc,Select the address type you’d li
,20,derivation_path_btc_1_desc,"Modern format, lower fees, starts with ""bc1.""","Современный формат с низкими комиссиями, начинается с «bc1».","최신 형식, 낮은 수수, 주소는 ""bc1""로 시작합니다","当前主流的地址类型,交易费较低,地址以"" bc1""开头.","Formato moderno, tarifas más bajas, comienza con bc1.","Modernes Format, niedrigere Gebühren, beginnt mit bc1.",現代的な形式、低い手数料、"bc1."から始まります
,20,derivation_path_btc_2_desc,"Legacy & SegWit compatible, medium fees, starts with ""3.""","Совместимый с Legacy и SegWit со средними комиссиями, начинается с «3».","레거시 & SegWit 호환, 중간 수수료, 주소는 ""3""부터 시작합니다","兼容 ""Legacy"" 和 ""Segwit"" 地址类型,交易费中等,地址以"" 3""开头.","Legacy & SegWit compatible, comisiones moderadas, comienza con 3.","Legacy & SegWit kompatibel, mittlere Gebühren, beginnt mit 3.",レガシーおよびSegWit互換、手数料は中程度、3."から始まります"
,20,derivation_path_btc_3_desc,"Original format, higher fees, starts with ""1.""","Исходный формат с более высокими комиссиями, начинается с «1».","최초 비트코인 형식, 높은 수수료, 주소는 ""1""로 시작합니다","最初的比特币地址格式,交易费较高,地址以"" 1""开头.","Formato original, tarifas más altas, comienza con 1.","Formato original, tarifas más altas, comienza con 1. Ursprüngliches Format, höhere Gebühren, beginnt mit 1.",オリジナルの形式、高い手数料、1.から始まります
+,20,derivation_path_ltc_nested_desc,"addresses start with a ""M""Addresses eg.","Адреса начинаются с «M»","주소는 "M"으로 시작합니다","地址以 “M” 开头","Las direcciones comienzan con "M"","Adressen beginnen mit „M“","アドレスは「M」から始まります"
+,20,derivation_path_ltc_native_desc,"addresses start with a ""ltc1""Addresses eg.","Адреса начинаются с «ltc1»","주소는 "ltc1"으로 시작합니다","地址以 “ltc1” 开头","Las direcciones comienzan con "ltc1"","Adressen beginnen mit „ltc1“","アドレスは「ltc1」から始まります"
,20,derivation_path_select_eth,Select the derivation path you’d like to use for Ethereum,"Выберите путь вывода Ethereum, который вы хотите использовать",이더리움에 사용할 파생 경로를 선택하십시오,选择以太坊地址的衍生路径,Seleccione la ruta de derivación que desee utilizar para Ethereum,"Wählen Sie den Ableitungspfad aus, den Sie für Ethereum verwenden möchten.",イーサリアムで使用する派生経路を選択してください.
,20,derivation_path_select_avax,Select the Avalanche Chain relevant to your transaction,"Выберите соответствующую цепочку Avalanche для вашей транзакции.",거래와 관련된 Avalanche 체인을 선택하세요,请选择与您的交易相关的 Avalanche 区块链,Seleccione la cadena de Avalanche relevante para su transacción.,"Wählen Sie die für Ihre Transaktion relevante Avalanche-Chain aus",取引に関連する Avalanche チェーンを選択してください
,20,derivation_path_eth_standard_desc,"Default, follows BIP44, widely used.","По умолчанию, следует стандарту BIP44, популярный",BIP44를 따르는 기본 경로는 널리 사용됩니다.,"默认路径,遵循 BIP44,广泛使用.","Modo predeterminado, sigue BIP44, ampliamente utilizado.","Standard, folgt BIP44, weit verbreitet.",デフォルト、BIP44に従い、広く利用されています.
@@ -1059,4 +1061,13 @@ Wallet Profile,24,wallet_profile_mid_btn,Wallet Profile,Профиль коше
,24,disable_passphrase,Disable Passphrase,Отключить пароль,패스프레이즈 비활성화,禁用密码短语,Deshabilitar frase de contraseña,Passphrase deaktivieren,パスフレーズを無効にする,
,20,ton_assets_manage_notice,"The TON wallet does not support adding other mainnets like Bitcoin or Ethereum due to incompatible seed phrase.","TON кошелек не поддерживает добавление других основных сетей, таких как Bitcoin или Ethereum, из-за несовместимой сид-фразы.","TON 지갑은 호환되지 않는 시드 구문으로 인해 Bitcoin이나 Ethereum과 같은 다른 메인넷 추가를 지원하지 않습니다.","TON钱包不支持添加其他主网(如比特币或以太坊),因为助记词不兼容。","La billetera TON no admite agregar otras redes principales como Bitcoin o Ethereum debido a la frase semilla incompatible.","Die TON-Wallet unterstützt das Hinzufügen anderer Mainnets wie Bitcoin oder Ethereum aufgrund inkompatibler Seed-Phrasen nicht.","TONウォレットは、互換性のないシードフレーズのため、BitcoinやEthereumなどの他のメインネットの追加をサポートしていません。"
,28,sign_message_invalid_characters_title,"Invalid Message","Недопустимое сообщение","잘못된 메시지","无效消息","Mensaje inválido","Ungültige Nachricht","無効なメッセージ"
-,20,sign_message_invalid_characters_desc,"This message contains invalid characters. Please review the message content and try again.","Это сообщение содержит недопустимые символы. Пожалуйста, проверьте содержимое сообщения и попробуйте снова.","이 메시지에는 잘못된 문자가 포함되어 있습니다. 메시지 내용을 검토하고 다시 시도하세요.","此消息包含无效字符。请检查消息内容并重试。","Este mensaje contiene caracteres inválidos. Por favor, revise el contenido del mensaje e inténtelo de nuevo.","Diese Nachricht enthält ungültige Zeichen. Bitte überprüfen Sie den Nachrichteninhalt und versuchen Sie es erneut.","このメッセージには無効な文字が含まれています。メッセージの内容を確認して、もう一度お試しください。"
\ No newline at end of file
+,20,sign_message_invalid_characters_desc,"This message contains invalid characters. Please review the message content and try again.","Это сообщение содержит недопустимые символы. Пожалуйста, проверьте содержимое сообщения и попробуйте снова.","이 메시지에는 잘못된 문자가 포함되어 있습니다. 메시지 내용을 검토하고 다시 시도하세요.","此消息包含无效字符。请检查消息内容并重试。","Este mensaje contiene caracteres inválidos. Por favor, revise el contenido del mensaje e inténtelo de nuevo.","Diese Nachricht enthält ungültige Zeichen. Bitte überprüfen Sie den Nachrichteninhalt und versuchen Sie es erneut.","このメッセージには無効な文字が含まれています。メッセージの内容を確認して、もう一度お試しください。"
+,20,receive_ltc_more_t_title1,"Know The Difference: Nested SegWit, and Native SegWit Derivation Paths in LTC","Узнайте разницу: вложенный SegWit и нативные пути деривации SegWit в LTC","차이를 알아보기: LTC에서 Nested SegWit 및 Native SegWit 파생 경로","了解区别:LTC 中的 Nested SegWit 与 Native SegWit 派生路径","Conozca la diferencia: rutas de derivación Nested SegWit y Native SegWit en LTC","Erkennen Sie den Unterschied: Verschachtelte SegWit- und Native SegWit-Ableitungspfade in LTC","違いを知ろう:LTC における Nested SegWit と Native SegWit の派生パス"
+,20,receive_ltc_more_t_desc1,"1. Nested SegWit: A transitional format where SegWit is nested inside P2SH. It offers better efficiency than Legacy and is the most commonly used format due to broad compatibility.
+2.Native SegWit: Fully native SegWit format with lower fees and smaller transaction sizes. Increasingly popular and supported by most major wallets and exchanges","1.Nested SegWit: переходный формат, где SegWit вложен в P2SH. Он обеспечивает лучшую эффективность, чем Legacy, и является наиболее часто используемым форматом благодаря широкой совместимости.
+2.Native SegWit: полностью нативный формат SegWit с более низкими комиссиями и меньшими размерами транзакций. Становится всё более популярным и поддерживается большинством основных кошельков и бирж.","1.Nested SegWit: SegWit이 P2SH 안에 중첩된 과도기적 형식입니다. Legacy보다 효율성이 뛰어나며, 광범위한 호환성 덕분에 가장 일반적으로 사용되는 형식입니다.
+2.Native SegWit: 완전한 네이티브 SegWit 형식으로, 수수료가 더 낮고 거래 크기가 더 작습니다. 점점 더 인기를 얻고 있으며 대부분의 주요 지갑과 거래소에서 지원됩니다.","1.Nested SegWit:一种过渡格式,将 SegWit 嵌套在 P2SH 中。它比 Legacy 更高效,并因广泛的兼容性而成为最常用的格式。
+2.Native SegWit:完全原生的 SegWit 格式,手续费更低,交易体积更小。越来越受欢迎,并得到大多数主流钱包和交易所的支持。","1.Nested SegWit: un formato transicional donde SegWit está anidado dentro de P2SH. Ofrece mayor eficiencia que Legacy y es el formato más utilizado debido a su amplia compatibilidad.
+2.Native SegWit: formato SegWit totalmente nativo con tarifas más bajas y tamaños de transacción más pequeños. Cada vez más popular y compatible con la mayoría de las principales billeteras y exchanges.","1.Nested SegWit: ein Übergangsformat, bei dem SegWit in P2SH eingebettet ist. Es bietet eine bessere Effizienz als Legacy und ist aufgrund der breiten Kompatibilität das am häufigsten verwendete Format.
+2.Native SegWit: vollständig natives SegWit-Format mit niedrigeren Gebühren und kleineren Transaktionsgrößen. Wird zunehmend beliebter und wird von den meisten großen Wallets und Börsen unterstützt.","1.Nested SegWit:SegWit を P2SH 内にネストした移行形式です。Legacy より効率的で、幅広い互換性により最も一般的に使用されている形式です。
+2.Native SegWit:完全にネイティブな SegWit 形式で、手数料が低く、トランザクションサイズも小さくなります。主要なウォレットや取引所のほとんどでサポートされ、ますます普及しています。"
\ No newline at end of file
diff --git a/src/ui/lv_i18n/lv_i18n.c b/src/ui/lv_i18n/lv_i18n.c
index f398c3f..88e993a 100644
--- a/src/ui/lv_i18n/lv_i18n.c
+++ b/src/ui/lv_i18n/lv_i18n.c
@@ -342,6 +342,8 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"derivation_path_eth_ledger_legacy_desc", "Older Ledger format, less common."},
{"derivation_path_eth_ledger_live_desc", "Ledger-specific, optimized for Ledger device."},
{"derivation_path_eth_standard_desc", "Default, follows BIP44, widely used."},
+ {"derivation_path_ltc_native_desc", "addresses start with a \"ltc1\"Addresses eg."},
+ {"derivation_path_ltc_nested_desc", "addresses start with a \"M\"Addresses eg."},
{"derivation_path_near_standard_desc", "Recommended. Widely adopted across numerous NEAR wallets."},
{"derivation_path_select_ada", "Select the address generation you’d like to use for Cardano"},
{"derivation_path_select_avax", "Select the Avalanche Chain relevant to your transaction"},
@@ -658,6 +660,8 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"receive_eth_more_t_title1", "Exploring Differences: Standard, Ledger Live, and Legacy Derivation Paths in Ethereum"},
{"receive_eth_receive_main_title", "Receive ETH"},
{"receive_generate_new_address", "Generate New Address"},
+ {"receive_ltc_more_t_desc1", "1. Nested SegWit: A transitional format where SegWit is nested inside P2SH. It offers better efficiency than Legacy and is the most commonly used format due to broad compatibility. \r\n2.Native SegWit: Fully native SegWit format with lower fees and smaller transaction sizes. Increasingly popular and supported by most major wallets and exchanges"},
+ {"receive_ltc_more_t_title1", "Know The Difference: Nested SegWit, and Native SegWit Derivation Paths in LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Account-based Path"},
{"receive_sol_more_t_desc1", "1. Account-based Path: Widely adopted across numerous Solana wallets. An example of such a wallet is Solflare.\r\n2. Single Account Path: Choose this path if you intend to import a seed phrase from Sollet / MathWallet. Please note that Keystone supports synchronizing only the initial 10 addresses using this format.\r\n3. Sub-account Path: Transition to this path if you manage your digital assets with software wallets like Phantom / Exodus."},
@@ -1296,6 +1300,8 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"derivation_path_eth_ledger_legacy_desc", "Älteres Ledger-Format, weniger verbreitet."},
{"derivation_path_eth_ledger_live_desc", "Spezifisch für Ledger, optimiert für die Ledger-Geräte."},
{"derivation_path_eth_standard_desc", "Standard, folgt BIP44, weit verbreitet."},
+ {"derivation_path_ltc_native_desc", "Adressen beginnen mit „ltc1“"},
+ {"derivation_path_ltc_nested_desc", "Adressen beginnen mit „M“"},
{"derivation_path_near_standard_desc", "Empfohlen. Weit verbreitet in zahlreichen NEAR-Wallets."},
{"derivation_path_select_ada", "Adressgenerierung für Cardano auswählen"},
{"derivation_path_select_avax", "Wählen Sie die für Ihre Transaktion relevante Avalanche-Chain aus"},
@@ -1612,6 +1618,8 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"receive_eth_more_t_title1", "Erkundung von Unterschieden: Standard, Ledger Live und Legacy Derivation Pfade in Ethereum"},
{"receive_eth_receive_main_title", "Erhalte ETH"},
{"receive_generate_new_address", "Neue Adresse generieren"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: ein Übergangsformat, bei dem SegWit in P2SH eingebettet ist. Es bietet eine bessere Effizienz als Legacy und ist aufgrund der breiten Kompatibilität das am häufigsten verwendete Format.\r\n2.Native SegWit: vollständig natives SegWit-Format mit niedrigeren Gebühren und kleineren Transaktionsgrößen. Wird zunehmend beliebter und wird von den meisten großen Wallets und Börsen unterstützt."},
+ {"receive_ltc_more_t_title1", "Erkennen Sie den Unterschied: Verschachtelte SegWit- und Native SegWit-Ableitungspfade in LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Aktengestützter Pfad"},
{"receive_sol_more_t_desc1", "1. Kontobasierter Pfad: Weit verbreitet in zahlreichen Solana-Wallets übernommen. Ein Beispiel für ein solches Wallet ist Solflare.\r\n2. Einzelkontopfad: Wählen Sie diesen Pfad, wenn Sie vorhaben, eine Seed-Phrase von Sollet / MathWallet zu importieren. Bitte beachten Sie, dass Keystone nur das erstmalige Synchronisieren von 10 Adressen mit diesem Format unterstützt.\r\n3. Unterkontopfad: Wechseln Sie zu diesem Pfad, wenn Sie Ihre digitalen Vermögenswerte mit Software-Wallets wie Phantom / Exodus verwalten."},
@@ -2250,6 +2258,8 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"derivation_path_eth_ledger_legacy_desc", "Formato de Ledger mayor anterior, menos común."},
{"derivation_path_eth_ledger_live_desc", "Específico de Ledger, optimizado para dispositivo Ledger."},
{"derivation_path_eth_standard_desc", "Modo predeterminado, sigue BIP44, ampliamente utilizado."},
+ {"derivation_path_ltc_native_desc", "Las direcciones comienzan con ltc1\"\""},
+ {"derivation_path_ltc_nested_desc", "Las direcciones comienzan con M\"\""},
{"derivation_path_near_standard_desc", "Recomendado. Ampliamente adoptado en numerosas billeteras Near"},
{"derivation_path_select_ada", "Seleccione generación de direcciones para Cardano"},
{"derivation_path_select_avax", "Seleccione la cadena de Avalanche relevante para su transacción."},
@@ -2566,6 +2576,8 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"receive_eth_more_t_title1", "Explorando diferencias: caminos de derivación estándar, Ledger Live y Legacy en Ethereum"},
{"receive_eth_receive_main_title", "Recibir ETH"},
{"receive_generate_new_address", "Generar nueva dirección"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: un formato transicional donde SegWit está anidado dentro de P2SH. Ofrece mayor eficiencia que Legacy y es el formato más utilizado debido a su amplia compatibilidad.\r\n2.Native SegWit: formato SegWit totalmente nativo con tarifas más bajas y tamaños de transacción más pequeños. Cada vez más popular y compatible con la mayoría de las principales billeteras y exchanges."},
+ {"receive_ltc_more_t_title1", "Conozca la diferencia: rutas de derivación Nested SegWit y Native SegWit en LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Ruta basada en cuentas"},
{"receive_sol_more_t_desc1", "1. Ruta basada en cuentas: Ampliamente adoptada en numerosas billeteras de Solana. Un ejemplo de esta billetera es Solflare.\r\n2. Ruta de cuenta única: Elije esta ruta si deseas importar una frase de recuperación desde Sollet / MathWallet. Ten en cuenta que Keystone solo admite la sincronización de las 10 direcciones iniciales utilizando este formato.\r\n3. Ruta de subcuenta: Haz la transición a esta ruta si administras tus activos digitales con billeteras de software como Phantom / Exodus."},
@@ -3201,6 +3213,8 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"derivation_path_eth_ledger_legacy_desc", "旧しい形式の台帳、より一般的ではありません."},
{"derivation_path_eth_ledger_live_desc", "レジャー専用、レジャーデバイスに最適化された."},
{"derivation_path_eth_standard_desc", "デフォルト、BIP44に従い、広く利用されています."},
+ {"derivation_path_ltc_native_desc", "アドレスは「ltc1」から始まります"},
+ {"derivation_path_ltc_nested_desc", "アドレスは「M」から始まります"},
{"derivation_path_near_standard_desc", "おすすめです.多くのNEARウォレットに広く採用されています."},
{"derivation_path_select_ada", "Cardanoのアドレス生成方式を選択してください"},
{"derivation_path_select_avax", "取引に関連する Avalanche チェーンを選択してください"},
@@ -3517,6 +3531,8 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"receive_eth_more_t_title1", "異なるアプローチの探索:イーサリアムにおける標準、Ledger Live、およびレガシー派生パス"},
{"receive_eth_receive_main_title", "ETHを受け取る"},
{"receive_generate_new_address", "新しいアドレスを作成する"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit:SegWit を P2SH 内にネストした移行形式です。Legacy より効率的で、幅広い互換性により最も一般的に使用されている形式です。\r\n2.Native SegWit:完全にネイティブな SegWit 形式で、手数料が低く、トランザクションサイズも小さくなります。主要なウォレットや取引所のほとんどでサポートされ、ますます普及しています。"},
+ {"receive_ltc_more_t_title1", "違いを知ろう:LTC における Nested SegWit と Native SegWit の派生パス"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "アカウントベースのパス"},
{"receive_sol_more_t_desc1", "1. アカウントベースのパス:多くのSolanaウォレットで広く採用されています.このようなウォレットの例はSolflareです.\r\n2. 単一アカウントパス:Sollet / MathWalletからシードフレーズをインポートする場合は、このパスを選択してください.Keystoneは、この形式を使用して最初の10個のアドレスのみを同期することができることに注意してください.\r\n3. サブアカウントパス:Phantom / Exodusなどのソフトウェアウォレットでデジタル資産を管理している場合は、このパスに移行してください."},
@@ -4150,6 +4166,8 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"derivation_path_eth_ledger_legacy_desc", "오래된 Ledger 주소의 파생 경로로 자주 사용되지 않습니다."},
{"derivation_path_eth_ledger_live_desc", "Ledger가 대응하는 이더리움 주소 경로입니다."},
{"derivation_path_eth_standard_desc", "BIP44를 따르는 기본 경로는 널리 사용됩니다."},
+ {"derivation_path_ltc_native_desc", "주소는 ltc1\"으로 시작합니다\""},
+ {"derivation_path_ltc_nested_desc", "주소는 M\"으로 시작합니다\""},
{"derivation_path_near_standard_desc", "추천 경로는 많은 Near 지갑에 채택되었습니다."},
{"derivation_path_select_ada", "Cardano 주소 생성 방식 선택"},
{"derivation_path_select_avax", "거래와 관련된 Avalanche 체인을 선택하세요"},
@@ -4466,6 +4484,8 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"receive_eth_more_t_title1", "차이점 탐색: 표준, 원장 라이브 및 이더리움의 레거시 도출 경로"},
{"receive_eth_receive_main_title", "ETH 받기"},
{"receive_generate_new_address", "새 주소 생성"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: SegWit이 P2SH 안에 중첩된 과도기적 형식입니다. Legacy보다 효율성이 뛰어나며, 광범위한 호환성 덕분에 가장 일반적으로 사용되는 형식입니다.\r\n2.Native SegWit: 완전한 네이티브 SegWit 형식으로, 수수료가 더 낮고 거래 크기가 더 작습니다. 점점 더 인기를 얻고 있으며 대부분의 주요 지갑과 거래소에서 지원됩니다."},
+ {"receive_ltc_more_t_title1", "차이를 알아보기: LTC에서 Nested SegWit 및 Native SegWit 파생 경로"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "계정 기반 경로"},
{"receive_sol_more_t_desc1", "\"1. 계정 기반 경로: 수많은 솔라나 지갑에 널리 채택되고 있습니다. 그러한 지갑의 예로는 솔프라레가 있습니다.\r\n 2. 단일 계정 경로: Sollet / MathWallet에서 시드 구문을 가져오려면 이 경로를 선택하십시오. Keystone은 이 형식을 사용하여 초기 10개 주소만 동기화할 수 있습니다.\r\n 3. 하위 계정 경로: 팬텀/엑소더스와 같은 소프트웨어 지갑으로 디지털 자산을 관리하면 이 경로로 전환하십시오.\""},
@@ -5099,6 +5119,8 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"derivation_path_eth_ledger_legacy_desc", "Формат адреса для старых устройств Ledger"},
{"derivation_path_eth_ledger_live_desc", "Формат адреса для устройств Ledger"},
{"derivation_path_eth_standard_desc", "По умолчанию, следует стандарту BIP44, популярный"},
+ {"derivation_path_ltc_native_desc", "Адреса начинаются с «ltc1»"},
+ {"derivation_path_ltc_nested_desc", "Адреса начинаются с «M»"},
{"derivation_path_near_standard_desc", "Рекомендуется. Популярный формат для многих кошельков NEAR."},
{"derivation_path_select_ada", "Выберите способ создания адреса для Cardano"},
{"derivation_path_select_avax", "Выберите соответствующую цепочку Avalanche для вашей транзакции."},
@@ -5415,6 +5437,8 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"receive_eth_more_t_title1", "Ledger Live и устаревших путей вывода в Ethereum\""},
{"receive_eth_receive_main_title", "Получить ETH"},
{"receive_generate_new_address", "Создать новый адрес"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit: переходный формат, где SegWit вложен в P2SH. Он обеспечивает лучшую эффективность, чем Legacy, и является наиболее часто используемым форматом благодаря широкой совместимости.\r\n2.Native SegWit: полностью нативный формат SegWit с более низкими комиссиями и меньшими размерами транзакций. Становится всё более популярным и поддерживается большинством основных кошельков и бирж."},
+ {"receive_ltc_more_t_title1", "Узнайте разницу: вложенный SegWit и нативные пути деривации SegWit в LTC"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "Путь основного счета"},
{"receive_sol_more_t_desc1", "1. Путь на основе учетной записи: широко применяется во многих кошельках Solana. Примером такого кошелька является Solflare.\r\n2. Путь к единой учетной записи: выберите этот путь, если вы собираетесь импортировать исходную фразу из Sollet/MathWallet. Обратите внимание, что Keystone поддерживает синхронизацию только первых 10 адресов в этом формате.\r\n3. Путь субсчета: перейдите на этот путь, если вы управляете своими цифровыми активами с помощью программных кошельков, таких как Phantom/Exodus."},
@@ -6056,6 +6080,8 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"derivation_path_eth_ledger_legacy_desc", "较老的 Ledger 地址衍生路径,不常用."},
{"derivation_path_eth_ledger_live_desc", "Ledger 对应的以太坊地址路径."},
{"derivation_path_eth_standard_desc", "默认路径,遵循 BIP44,广泛使用."},
+ {"derivation_path_ltc_native_desc", "地址以 “ltc1” 开头"},
+ {"derivation_path_ltc_nested_desc", "地址以 “M” 开头"},
{"derivation_path_near_standard_desc", "推荐路径,被许多 Near 钱包采用."},
{"derivation_path_select_ada", "选择您希望用于 Cardano 的地址生成方式"},
{"derivation_path_select_avax", "请选择与您的交易相关的 Avalanche 区块链"},
@@ -6372,6 +6398,8 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"receive_eth_more_t_title1", "了解以太坊中的标准路径、Ledger Live和Ledger Legacy的派生路径"},
{"receive_eth_receive_main_title", "接收 ETH"},
{"receive_generate_new_address", "生成新地址"},
+ {"receive_ltc_more_t_desc1", "1.Nested SegWit:一种过渡格式,将 SegWit 嵌套在 P2SH 中。它比 Legacy 更高效,并因广泛的兼容性而成为最常用的格式。\r\n2.Native SegWit:完全原生的 SegWit 格式,手续费更低,交易体积更小。越来越受欢迎,并得到大多数主流钱包和交易所的支持。"},
+ {"receive_ltc_more_t_title1", "了解区别:LTC 中的 Nested SegWit 与 Native SegWit 派生路径"},
{"receive_more_t_qr_link", "https://keyst.one/t/3rd/faq"},
{"receive_sol_more_t_base_path", "基于帐户的路径"},
{"receive_sol_more_t_desc1", "1. Account-based 路径:被许多 Solana 钱包采用,比如 Solflare.\r\n2. Single Account 路径:如果您将 Sollet 或者 MathWallet钱包的助记词导入到 Keystone,则选择此路径.请注意,Keystone 仅支持此路径下的前10个地址.\r\n3. Sub-account 路径:如果您将 Phantom 或者 Exodus 钱包的助记词导入到 Keystone,则选择此路径."},
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.