diff --git a/.changeset/witty-socks-tan.md b/.changeset/witty-socks-tan.md
new file mode 100644
index 000000000000..a9fb5678815e
--- /dev/null
+++ b/.changeset/witty-socks-tan.md
@@ -0,0 +1,15 @@
+---
+"@ledgerhq/types-cryptoassets": minor
+"@ledgerhq/cryptoassets": minor
+"@ledgerhq/types-live": minor
+"@ledgerhq/crypto-icons-ui": minor
+"@ledgerhq/coin-mina": minor
+"ledger-live-desktop": minor
+"live-mobile": minor
+"@ledgerhq/live-common": minor
+"@ledgerhq/coin-framework": minor
+"@ledgerhq/web-tools": minor
+"@ledgerhq/live-cli": minor
+---
+
+Add support for mina blockchain
diff --git a/apps/cli/src/live-common-setup-base.ts b/apps/cli/src/live-common-setup-base.ts
index e3033759d87a..83a8bf4fd772 100644
--- a/apps/cli/src/live-common-setup-base.ts
+++ b/apps/cli/src/live-common-setup-base.ts
@@ -110,6 +110,7 @@ setSupportedCurrencies([
"zenrock",
"sonic",
"sonic_blaze",
+ "mina",
]);
for (const k in process.env) setEnvUnsafe(k as EnvName, process.env[k]);
diff --git a/apps/ledger-live-desktop/src/live-common-set-supported-currencies.ts b/apps/ledger-live-desktop/src/live-common-set-supported-currencies.ts
index 2742125fb7bb..6cb5ee0fa11e 100644
--- a/apps/ledger-live-desktop/src/live-common-set-supported-currencies.ts
+++ b/apps/ledger-live-desktop/src/live-common-set-supported-currencies.ts
@@ -104,4 +104,5 @@ setSupportedCurrencies([
"zenrock",
"sonic",
"sonic_blaze",
+ "mina",
]);
diff --git a/apps/ledger-live-desktop/src/renderer/families/mina/AccountSubHeader.tsx b/apps/ledger-live-desktop/src/renderer/families/mina/AccountSubHeader.tsx
new file mode 100644
index 000000000000..5ff2dc89148c
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/mina/AccountSubHeader.tsx
@@ -0,0 +1,6 @@
+import React from "react";
+import AccountSubHeader from "../../components/AccountSubHeader/index";
+
+export default function MinaAccountSubHeader() {
+ return ;
+}
diff --git a/apps/ledger-live-desktop/src/renderer/families/mina/MemoField.tsx b/apps/ledger-live-desktop/src/renderer/families/mina/MemoField.tsx
new file mode 100644
index 000000000000..60a2507ba868
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/mina/MemoField.tsx
@@ -0,0 +1,48 @@
+import React, { useCallback } from "react";
+import { getAccountBridge } from "@ledgerhq/live-common/bridge/index";
+import invariant from "invariant";
+import { Account } from "@ledgerhq/types-live";
+import { Transaction, TransactionStatus } from "@ledgerhq/live-common/families/mina/types";
+import { useTranslation } from "react-i18next";
+import MemoTagField from "~/newArch/features/MemoTag/components/MemoTagField";
+
+const MemoField = ({
+ onChange,
+ account,
+ transaction,
+ status,
+}: {
+ onChange: (a: Transaction) => void;
+ account: Account;
+ transaction: Transaction;
+ status: TransactionStatus;
+}) => {
+ invariant(transaction.family === "mina", "Memo: Mina family expected");
+
+ const { t } = useTranslation();
+
+ const bridge = getAccountBridge(account);
+
+ const onMemoFieldChange = useCallback(
+ (value: string) => {
+ if (value !== "") onChange(bridge.updateTransaction(transaction, { memo: value }));
+ else onChange(bridge.updateTransaction(transaction, { memo: undefined }));
+ },
+ [onChange, transaction, bridge],
+ );
+
+ // We use transaction as an error here.
+ // on the ledger-live desktop
+ return (
+
+ );
+};
+
+export default MemoField;
diff --git a/apps/ledger-live-desktop/src/renderer/families/mina/SendAmountFields.tsx b/apps/ledger-live-desktop/src/renderer/families/mina/SendAmountFields.tsx
new file mode 100644
index 000000000000..2c7037b46dd3
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/mina/SendAmountFields.tsx
@@ -0,0 +1,35 @@
+import React from "react";
+import MemoField from "./MemoField";
+import Box from "~/renderer/components/Box";
+import { Transaction, TransactionStatus } from "@ledgerhq/live-common/families/mina/types";
+import { Account } from "@ledgerhq/types-live";
+
+const Root = (props: {
+ account: Account;
+ transaction: Transaction;
+ status: TransactionStatus;
+ onChange: (a: Transaction) => void;
+ trackProperties?: object;
+}) => {
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+export default {
+ component: Root,
+ // Transaction is used here to prevent user to forward
+ fields: ["memo", "transaction"],
+};
diff --git a/apps/ledger-live-desktop/src/renderer/families/mina/index.ts b/apps/ledger-live-desktop/src/renderer/families/mina/index.ts
new file mode 100644
index 000000000000..d9acdb6bc427
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/mina/index.ts
@@ -0,0 +1,12 @@
+import AccountSubHeader from "./AccountSubHeader";
+import sendAmountFields from "./SendAmountFields";
+import operationDetails from "./operationDetails";
+import { MinaFamily } from "./types";
+
+const family: MinaFamily = {
+ AccountSubHeader,
+ operationDetails,
+ sendAmountFields,
+};
+
+export default family;
diff --git a/apps/ledger-live-desktop/src/renderer/families/mina/operationDetails.tsx b/apps/ledger-live-desktop/src/renderer/families/mina/operationDetails.tsx
new file mode 100644
index 000000000000..2a466279fc4e
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/mina/operationDetails.tsx
@@ -0,0 +1,56 @@
+import React from "react";
+import { Trans } from "react-i18next";
+import {
+ OpDetailsTitle,
+ OpDetailsData,
+ OpDetailsSection,
+} from "~/renderer/drawers/OperationDetails/styledComponents";
+import Ellipsis from "~/renderer/components/Ellipsis";
+import { MinaOperation } from "@ledgerhq/live-common/families/mina/types";
+import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/formatCurrencyUnit";
+import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
+import BigNumber from "bignumber.js";
+
+type OperationDetailsExtraProps = {
+ operation: MinaOperation;
+};
+
+const OperationDetailsExtra = ({ operation }: OperationDetailsExtraProps) => {
+ const { extra } = operation;
+ const sections = [];
+ if (extra.memo) {
+ sections.push(
+
+
+
+
+
+ {extra.memo}
+
+ ,
+ );
+ }
+
+ if (extra.accountCreationFee !== "0") {
+ sections.push(
+
+
+
+
+
+ {formatCurrencyUnit(
+ getCryptoCurrencyById("mina").units[0],
+ new BigNumber(extra.accountCreationFee),
+ { showCode: true },
+ )}
+
+ ,
+ );
+ }
+
+ return sections;
+};
+
+export default {
+ OperationDetailsExtra,
+};
diff --git a/apps/ledger-live-desktop/src/renderer/families/mina/types.ts b/apps/ledger-live-desktop/src/renderer/families/mina/types.ts
new file mode 100644
index 000000000000..ebf584b3dd73
--- /dev/null
+++ b/apps/ledger-live-desktop/src/renderer/families/mina/types.ts
@@ -0,0 +1,9 @@
+import {
+ MinaAccount,
+ MinaOperation,
+ Transaction,
+ TransactionStatus,
+} from "@ledgerhq/live-common/families/mina/types";
+import { LLDCoinFamily } from "../types";
+
+export type MinaFamily = LLDCoinFamily;
diff --git a/apps/ledger-live-desktop/src/renderer/modals/AddAccounts/steps/StepChooseCurrency.tsx b/apps/ledger-live-desktop/src/renderer/modals/AddAccounts/steps/StepChooseCurrency.tsx
index 0d32cad32c49..a7aef0773522 100644
--- a/apps/ledger-live-desktop/src/renderer/modals/AddAccounts/steps/StepChooseCurrency.tsx
+++ b/apps/ledger-live-desktop/src/renderer/modals/AddAccounts/steps/StepChooseCurrency.tsx
@@ -91,6 +91,7 @@ const StepChooseCurrency = ({ currency, setCurrency }: StepProps) => {
const zenrock = useFeature("currencyZenrock");
const sonic = useFeature("currencySonic");
const sonicBlaze = useFeature("currencySonicBlaze");
+ const mina = useFeature("currencyMina");
const featureFlaggedCurrencies = useMemo(
(): Partial | null>> => ({
@@ -150,6 +151,7 @@ const StepChooseCurrency = ({ currency, setCurrency }: StepProps) => {
zenrock,
sonic,
sonic_blaze: sonicBlaze,
+ mina: mina,
}),
[
aptos,
@@ -208,6 +210,7 @@ const StepChooseCurrency = ({ currency, setCurrency }: StepProps) => {
zenrock,
sonic,
sonicBlaze,
+ mina,
],
);
diff --git a/apps/ledger-live-desktop/static/i18n/ar/app.json b/apps/ledger-live-desktop/static/i18n/ar/app.json
index 7a52413b1f30..b22f2623585f 100644
--- a/apps/ledger-live-desktop/static/i18n/ar/app.json
+++ b/apps/ledger-live-desktop/static/i18n/ar/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "™Ledger Nano S ليست متوافقة مع {{provider}}",
- "description" : "Ledger Nano S ليست متوافقة مع {{provider}}. يمكنك استخدام Ledger Nano S Plus أو Ledger Nano X أو Ledger Stax أو Ledger Flex لتجربة المبادلات عبر سلاسل الكتل المختلفة على {{provider}} عبر Ledger Live",
+ "description" : "™Ledger Nano S ليست متوافقة مع {{provider}}. يمكنك استخدام ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Stax أو ™Ledger Flex لتجربة المبادلات عبر سلاسل الكتل المختلفة على {{provider}} عبر Ledger Live",
"cta" : "استكشف الأجهزة المتوافقة",
"changeProvider" : "قم بالمبادلة مع مزود آخر"
},
@@ -449,8 +449,8 @@
"ton_description" : "لمبادلة Ton، استخدِم أي جهاز Ledger آخر متوافق مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
"spl_tokens_title" : "™Ledger Nano S لا تدعم مبادلة رموز سولانا (Solana)",
"spl_tokens_description" : "لمبادلة رموز سولانا (Solana)، استخدِم أي جهاز Ledger آخر متوافق مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "™Ledger Nano S لا تدعم مبادلة رموز Sui",
+ "sui_tokens_description" : "لمبادلة رموز Sui، استخدِم أي جهاز Ledger آخر متوافق مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
"near_title" : "™Ledger Nano S لا تدعم مبادلة Near",
"near_description" : "لمبادلة Near، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
"ada_title" : "™Ledger Nano S لا تدعم مبادلة كاردانو (Cardano)",
@@ -459,12 +459,12 @@
"apt_description" : "لمبادلة Aptos، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
"cosmos_title" : "™Ledger Nano S لا تدعم مبادلة Cosmos",
"cosmos_description" : "لمبادلة Cosmos، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "™Ledger Nano S لا تدعم مبادلة Osmosis",
+ "osmo_description" : "لمبادلة Osmosis، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
+ "dydx_title" : "™Ledger Nano S لا تدعم مبادلة dYdX",
+ "dydx_description" : "لمبادلة dYdX، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
+ "sui_title" : "™Ledger Nano S لا تدعم مبادلة Sui",
+ "sui_description" : "لمبادلة Sui، استخدم أي جهاز Ledger آخر متوافق مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax."
},
"providers" : {
"title" : "اختر أحد المزودين لمبادلة الأصول المشفرة",
@@ -776,6 +776,10 @@
"description3Link" : "هذا الدمج تم تنفيذه من قِبل <1><0>{{team}}1>0> بالتعاون مع Ledger"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} تُرحَّل إلى {{to}}. اتبع هذا <0>الرابط0> لمعرفة المزيد أو تواصل مع الدعم إذا كنت بحاجة إلى مساعدة.",
+ "contactSupport" : "تواصل مع الدعم"
+ },
"featureUnavailable" : {
"title" : "الميزة التالية غير متاحة بشكل مؤقت : {{feature}}. لمعرفة المزيد يُرجى الرجوع إلى {{support}}",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "الطريقة",
"transferAmount" : "مبلغ التحويل",
"validatorsCount" : "({{number}}) مدقق",
- "version" : "الإصدار"
+ "version" : "الإصدار",
+ "accountCreationFee" : "رسوم إنشاء الحساب"
}
},
"operationList" : {
@@ -2049,7 +2054,7 @@
"dontHaveSeed" : "ليست لديك عبارة الاسترداد الخاصة بك؟ ",
"followTheGuide" : "اتبع دليل الخطوة بخطوة للتحديث",
"removeApps" : "قم بإلغاء تثبيت جميع التطبيقات قبل التحديث",
- "update" : "تحديث نظام تشغيل {{productName}",
+ "update" : "تحديث نظام تشغيل {{productName}}",
"updateBtn" : "قم بتحديث البرنامج الثابت",
"installUpdate" : "تثبيت التحديث",
"banner" : {
@@ -3763,62 +3768,62 @@
"frozenStateWarning" : "تمّ تجميد أصول الحساب!",
"transferWarning" : "للتحقق من عنوان المستلم لرموز سولانا (Solana) باستخدام ™Ledger Nano S، <0>يرجى اتباع هذه التعليمات.0>",
"transferFees" : {
- "feesPercentHint" : "Token has {{feePercent}}% ({{feeBps}}bps) transfer fee. {{maxFee}} max",
- "notice" : "Transfer fee {{fee}}%",
- "tooltipHint" : "Percentage of transfer withheld for token creator",
- "transferFeesLabel" : "Transfer fees"
+ "feesPercentHint" : "رمز التوكن له %{{feePercent}} ({{feeBps}} نقطة أساس (bps) ) رسوم تحويل. {{maxFee}} بحد أقصى",
+ "notice" : "رسوم التحويل %{{fee}}",
+ "tooltipHint" : "النسبة المئوية من التحويل المحتجزة من أجل منشئ رمز التوكن",
+ "transferFeesLabel" : "رسوم التحويل"
},
"nonTransferable" : {
- "notice" : "Token is non-transferable"
+ "notice" : "رمز التوكن غير قابل للتحويل"
},
"interestRate" : {
- "notice" : "Interest rate: {{rate}}%",
- "tooltipHint" : "For cosmetic purposes only, no new tokens are created as a result of the interest"
+ "notice" : "مُعدل الفائدة: %{{rate}}",
+ "tooltipHint" : "من أجل الأغراض التجميلية فقط، لم يتم إنشاء أي رموز توكن جديدة نتيجةً للفائدة"
},
"permanentDelegate" : {
- "notice" : "Permanent delegate authority is enabled",
- "initializationNotice" : "Permanent delegate authority is initialized but not enabled",
- "tooltipHint" : "The delegate has the ability transfer or burn this token from your account"
+ "notice" : "سُلطة المُفوِّض الدائم (Permanent delegate) مُمكّنة",
+ "initializationNotice" : "سُلطة المُفوِّض الدائم (Permanent delegate) بدأت لكنها غير مُمكّنة",
+ "tooltipHint" : "المُفوِّض لديه القدرة على تحويل أو حرق رمز التوكن هذا من حسابك"
},
"requiredMemoOnTransfer" : {
- "notice" : "Required memo on transfer is enabled",
- "tooltipHint" : "All incoming transfers to this account must have a memo"
+ "notice" : "الملاحظة (تسمية الوجهة) الإلزامية على التحويل مُمكّنة",
+ "tooltipHint" : "كل التحويلات الواردة إلى هذا الحساب يجب أن تكون مصحوبةً بملاحظة (تسمية الوجهة)"
},
"transferHook" : {
- "notice" : "Transfer hook is enabled",
- "initializationNotice" : "Transfer hook is initialized but not enabled",
- "tooltipHint" : "Token has extra functionality handled by {{programAddress}} program"
+ "notice" : "خُطّاف التحويل (Transfer hook) مُمكّن",
+ "initializationNotice" : "خُطّاف التحويل (Transfer hook) بدأ لكنه غير مُمكّن",
+ "tooltipHint" : "رمز التوكن له وظيفة إضافية يتم التعامل معها بواسطة برنامج {{programAddress}}"
},
"extensionsInfo" : {
- "title" : "Solana token extensions",
- "commonInfo" : "Token extensions are the next generation of the Solana Token standard. They introduce a new set of ways to extend the normal token functionality with additional features such as confidential transfers, permanent delegate, custom transfer logic, extended metadata, and much more.",
+ "title" : "ملحقات رموز سولانا (Solana)",
+ "commonInfo" : "ملحقات الرموز هي الجيل القادم من معيار رمز سولانا (Solana). إنها تقدّم مجموعة جديدة من الطرق لتمديد وظيفة رمز التوكن العادية بميزات إضافية؛ مثل التحويلات السرية، والمُفوِّض الدائم (Permanent Delegate)، ومنطق التحويل المخصص، والبيانات الوصفية الممتدة، والكثير غير ذلك.",
"permanentDelegate" : {
- "title" : "Permanent delegate",
- "permanentDelegateAddress" : "Current delegate authority is {{address}}",
- "permanentDelegateNotSetup" : "Current delegate authority is not set up.",
- "description" : "Permanent delegate is an authority which has unlimited delegate privileges over any account for that mint. The delegate could burn or transfer any amount of tokens, at any time, on their own authority."
+ "title" : "المُفوِّض الدائم (Permanent Delegate)",
+ "permanentDelegateAddress" : "سلطة المُفوِّض الحالية هي {{address}}",
+ "permanentDelegateNotSetup" : "سلطة المُفوِّض الحالية لم يتم إعدادها.",
+ "description" : "المُفوِّض الدائم (Permanent Delegate) هو سلطة لديها امتيازات تفويض غير محدودة على أي حساب من أجل ذلك السكّ. المُفوِّض يمكن أن يقوم بحرق أو تحويل أي مبلغ من رموز التوكن، في أي وقت، ضمن سلطته."
},
"nonTransferable" : {
- "title" : "Non-Transferrable Tokens",
- "description" : "Such tokens are \"soul-bound\" and cannot be moved or burned, except by the token issuer."
+ "title" : "الرموز غير القابلة للتحويل",
+ "description" : "رموز التوكن تلك هي ”soul-bound (رموز مرتبطة بالروح)“ ولا يمكن نقلها أو حرقها إلا بواسطة مُصدر رمز التوكن."
},
"transferHook" : {
- "title" : "Transfer hook",
- "transferHookAddress" : "Current transfer hook program is {{address}}",
- "transferHookNotSetup" : "Current transfer hook program is not set up.",
- "description" : "Transfer hook gives a token issuers an ability to dictate how users and tokens interact. Instead of a normal transfer, issuer can insert custom logic into a program to be used with the transfer hook extension."
+ "title" : "خُطّاف التحويل (Transfer hook)",
+ "transferHookAddress" : "برنامج خُطّاف التحويل (Transfer hook) الحالي هو {{address}}",
+ "transferHookNotSetup" : "برنامج خُطّاف التحويل (Transfer hook) الحالي لم يتم إعداده.",
+ "description" : "خُطّاف التحويل (Transfer hook) يمنح مُصدري رموز التوكن قدرة على إملاء كيفية تفاعل المستخدمين ورموز التوكن. بدلاً من التحويل العادي، يمكن للمُصدر أن يُدخِل منطقاً مخصصاً في برنامج سيتم استخدامه مع ملحق خُطّاف التحويل (Transfer hook)."
},
"transferFee" : {
- "title" : "Transfer Fee",
- "currentTransferFee" : "Current transfer fee is {{feePercent}}% ({{feeBps}}bps). Max {{maxFee}}.",
- "description" : "Fees are charged on every transfer of a token and withheld on the recipient account, untouchable by the recipient."
+ "title" : "رسوم التحويل",
+ "currentTransferFee" : "رسوم التحويل الحالية هي %{{feePercent}} ({{feeBps}} نقطة أساس (bps) ). أقصى حد {{maxFee}}.",
+ "description" : "يتم فرض الرسوم على كل تحويل لرمز توكن وتُحجز على حساب المستلم، ولا يمكن للمستلم المساس بها."
},
"interestBearing" : {
- "title" : "Interest-Bearing Tokens",
- "currentInterestRate" : "Current interest rate is {{rate}}%.",
- "accruedDelta" : "Accrued {{delta}}.",
- "interestRateNotSetup" : "Current interest rate is set up to 0%.",
- "description" : "Tokens that constantly grow or decrease in value according on its interest rate. No new tokens are ever created, the feature is entirely cosmetic."
+ "title" : "رموز التوكن المُدرة للفائدة",
+ "currentInterestRate" : "مُعدل الفائدة الحالي هو %{{rate}}.",
+ "accruedDelta" : "المتراكمة {{delta}}.",
+ "interestRateNotSetup" : "مُعدل الفائدة الحالي تم تعيينه ليكون %0.",
+ "description" : "رموز التوكن التي تنمو أو تنخفض قيمتها باستمرار وفقاً لمعدل فائدتها. لا يتم إنشاء أي رموز توكن جديدة على الإطلاق، الميزة تجميلية بشكل كامل."
}
}
}
@@ -5510,7 +5515,12 @@
"solana" : {
"memo" : "علامة/ملاحظة (تسمية الوجهة)",
"memoPlaceholder" : "اختياري",
- "requiredMemoPlaceholder" : "Required"
+ "requiredMemoPlaceholder" : "مطلوب"
+ },
+ "mina" : {
+ "memoPlaceholder" : "اختياري",
+ "memo" : "ملاحظة (تسمية الوجهة)",
+ "memoWarningText" : "قيمة الملاحظة يمكن أن تكون سلسلةً أقصر من أو تساوي 32 حرفاً"
}
},
"errors" : {
@@ -6323,11 +6333,11 @@
"title" : "ربما تكون معاملتك قد فشلت. يُرجى الانتظار لحظة ثم تحقق من سجل المعاملات قبل المحاولة مرة أخرى."
},
"SolanaRecipientMemoIsRequired" : {
- "title" : "Memo is required for recipient address"
+ "title" : "الملاحظة (تسمية الوجهة) مطلوبة من أجل عنوان المستلم"
},
"SolanaTokenNonTransferable" : {
- "title" : "Token is non-transferable",
- "description" : "Such tokens are \"soul-bound\" and cannot be transferred"
+ "title" : "رمز التوكن غير قابل للتحويل",
+ "description" : "رموز التوكن تلك هي ”soul-bound (رموز مرتبطة بالروح)“ ولا يمكن تحويلها"
},
"NotEnoughNftOwned" : {
"title" : "لقد تجاوزت عدد رموز التوكن المتاحة"
@@ -6541,6 +6551,15 @@
"swap" : "مبادلة",
"deposit" : "إيداع"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "نص علامة الملاحظة (تسمية الوجهة) لا يمكن أن يكون أطول من 32 حرفاً"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "هذه المعاملة ستُكلّف رسوم إنشاء حساب بقيمة {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "الحد الأدنى للمبلغ المطلوب لهذه المعاملة هو {{amount}}"
}
},
"cryptoOrg" : {
@@ -6747,20 +6766,20 @@
},
"entryPoints" : {
"accounts" : {
- "title" : "Activate Ledger Sync"
+ "title" : "تنشيط مزامنة Ledger Sync"
},
"manager" : {
- "title" : "Ledger Sync",
- "description" : "Sync your accounts automatically, even when switching to a new phone.",
- "cta" : "Turn on Ledger Sync"
+ "title" : "مزامنة Ledger Sync",
+ "description" : "قم بمزامنة حساباتك تلقائياً، حتى عند التبديل إلى هاتف جديد.",
+ "cta" : "تشغيل مزامنة Ledger Sync"
},
"settings" : {
- "title" : "Ledger Sync",
- "description" : "Sync your accounts automatically, even when switching to a new phone.",
- "cta" : "Turn on Ledger Sync"
+ "title" : "مزامنة Ledger Sync",
+ "description" : "قم بمزامنة حساباتك تلقائياً، حتى عند التبديل إلى هاتف جديد.",
+ "cta" : "تشغيل مزامنة Ledger Sync"
},
"onboarding" : {
- "title" : "Sync with another Ledger Live app"
+ "title" : "المزامنة مع تطبيق Ledger Live آخر"
}
},
"manage" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "حان وقت الترقية",
- "description" : "قم بالترقية إلى أحدث أجهزتنا مع خصم <0>{{discount}}%0> من أجل أمان مُحسّن وتجربة سلسة.",
- "cta" : "ترقية محفظتي",
- "linkText" : "تعرّف على المزيد"
- },
- "optOut" : {
- "title" : "حان وقت الترقية",
- "description" : "قم بالترقية إلى أحدث أجهزتنا مع خصم <0>{{discount}}%0> من أجل أمان مُحسّن وتجربة سلسة.",
- "cta" : "ترقية محفظتي",
- "linkText" : "تعرّف على المزيد"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "حان وقت الترقية",
- "description" : "تحديثات Ledger Nano S ستنتهي قريباً. قم بالترقية إلى أحدث أجهزتنا مع خصم <0>{{discount}}%0>",
- "cta" : "ترقية محفظتي",
- "linkText" : "تعرّف على المزيد"
- },
- "optOut" : {
- "title" : "حان وقت الترقية",
- "description" : "تحديثات Ledger Nano S ستنتهي قريباً. قم بالترقية إلى أحدث أجهزتنا مع خصم <0>{{discount}}%0>",
- "cta" : "ترقية محفظتي",
- "linkText" : "تعرّف على المزيد"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "حان وقت الترقية",
- "description" : "قم بالترقية إلى أحدث أجهزتنا مع خصم <0>{{discount}}%0> من أجل أمان مُحسّن وتجربة سلسة.",
- "cta" : "ترقية محفظتي",
- "linkText" : "تعرّف على المزيد"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "التحديثات ستنتهي قريباً. قم بالترقية الآن مع خصم {{discount}}% من أجل تجربة سلسة.",
- "cta" : "ترقية محفظتي",
- "linkText" : "تعرّف على المزيد"
- },
- "optOut" : {
- "description" : "التحديثات ستنتهي قريباً. قم بالترقية الآن مع خصم {{discount}}% من أجل تجربة سلسة.",
- "cta" : "ترقية محفظتي",
- "linkText" : "تعرّف على المزيد"
- }
- }
+ "opted_in" : {
+ "title" : "ذاكرة محدودة، تجربة محدودة",
+ "description" : "قم بترقية Ledger Nano S الخاصة بك إلى جهاز Ledger جديد — مثل Ledger Flex — من أجل المزيد من الذاكرة، وأحدث تحسينات الأمان، وميزات جديدة <0>وخصم حصري %{{discount}}>.",
+ "cta" : "ترقية جهاز Ledger الخاص بي"
+ },
+ "opted_out" : {
+ "description" : "الذاكرة المحدودة في ledger Nano S الخاصة بك تُقيد وصولك إلى أحدث الميزات، ومتغيّرات سلاسل الكتل، وتحسينات الأمان. من أجل الاستخدام على المدى الطويل، قم بالترقية إلى جهاز Ledger أحدث.",
+ "cta" : "تعرّف على المزيد"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/de/app.json b/apps/ledger-live-desktop/static/i18n/de/app.json
index acc02aff18a8..043d5ff17d44 100644
--- a/apps/ledger-live-desktop/static/i18n/de/app.json
+++ b/apps/ledger-live-desktop/static/i18n/de/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "Ledger Nano S™ ist nicht mit {{provider}} kompatibel",
- "description" : "Ledger Nano S ist nicht mit {{provider}} kompatibel. Du kannst Ledger Nano S Plus, Ledger Nano X, Ledger Stax oder Ledger Flex verwenden, um blockchainübergreifende Swaps bei {{provider}} über Ledger Live durchzuführen.",
+ "description" : "Ledger Nano S™ ist nicht mit {{provider}} kompatibel. Du kannst Ledger Nano S Plus™, Ledger Nano X™, Ledger Stax™ oder Ledger Flex™ verwenden, um blockchainübergreifende Swaps bei {{provider}} über Ledger Live durchzuführen.",
"cta" : "Kompatible Geräte entdecken",
"changeProvider" : "Bei anderem Anbieter swappen"
},
@@ -449,8 +449,8 @@
"ton_description" : "Zum Swappen von Ton kannst du jedes sonstige kompatible Ledger-Gerät nutzen, z. B. Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ oder Ledger Stax™.",
"spl_tokens_title" : "Die Ledger Nano S™ unterstützt das Swappen von Solana-Token nicht",
"spl_tokens_description" : "Zum Swappen von Solana-Token kannst du jedes sonstige kompatible Ledger-Gerät nutzen, z. B. Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ oder Ledger Stax™.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "Die Ledger Nano S™ unterstützt das Swappen von Sui-Token nicht",
+ "sui_tokens_description" : "Zum Swappen von Sui-Token kannst du jedes sonstige kompatible Ledger-Gerät nutzen, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
"near_title" : "Ledger Nano S™ unterstützt das Swappen von Near nicht",
"near_description" : "Zum Swappen müsstest du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
"ada_title" : "Die Ledger Nano S™ unterstützt das Swappen von Cardano nicht",
@@ -459,12 +459,12 @@
"apt_description" : "Zum Swappen von Aptos müsstest du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
"cosmos_title" : "Ledger Nano S™ unterstützt das Swappen von Cosmos nicht",
"cosmos_description" : "Zum Swappen von Cosmos müsstest du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™ unterstützt das Swappen von Osmosis nicht",
+ "osmo_description" : "Zum Swappen von Osmosis musst du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
+ "dydx_title" : "Ledger Nano S™ unterstützt das Swappen von dYdX nicht",
+ "dydx_description" : "Zum Swappen von dYdX musst du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
+ "sui_title" : "Die Ledger Nano S™ unterstützt das Swappen von Sui nicht",
+ "sui_description" : "Zum Swappen von Sui kannst du jedes sonstige kompatible Ledger-Gerät nutzen, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™."
},
"providers" : {
"title" : "Wähle einen Anbieter für das Swappen von Kryptowährungen",
@@ -776,6 +776,10 @@
"description3Link" : "Diese Integration wurde von <1><0>{{team}}0>1> in Zusammenarbeit mit Ledger durchgeführt"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} migriert zu {{to}}. Folge diesem <0>Link0>, um mehr zu erfahren, oder wende dich an den Kundenservice, falls du Hilfe benötigst.",
+ "contactSupport" : "Support kontaktieren"
+ },
"featureUnavailable" : {
"title" : "Die folgende Funktion ist momentan nicht verfügbar: {{feature}}. Weitere Informationen erhältst du vom {{support}}.",
"feature" : {
@@ -1786,7 +1790,7 @@
"successDescription_plural" : "Andere Konten hinzufügen oder zum Portfolio zurückkehren",
"createNewAccount" : {
"noOperationOnLastAccount" : "Du kannst erst dann ein neues Konto hinzufügen, wenn du Guthaben auf deinem <1><0>{{accountName}}0>1>-Konto empfangen hast",
- "noAccountToCreate" : "Es wurde kein <1><0>{{currencyName}}}}0>1> Konto gefunden, das erstellt werden kann",
+ "noAccountToCreate" : "Es wurde kein <1><0>{{currencyName}}0>1> Konto gefunden, das erstellt werden kann",
"showAllAddressTypes" : "Alle Adresstypen anzeigen",
"showAllAddressTypesTooltip" : "Ändere den Adresstyp nur dann, wenn du {{family}} in anderen Adressformaten erhalten möchtest."
},
@@ -1875,7 +1879,8 @@
"palletMethod" : "Methode",
"transferAmount" : "Betrag transferieren",
"validatorsCount" : "Validatoren ({{number}})",
- "version" : "Version"
+ "version" : "Version",
+ "accountCreationFee" : "Kontoerstellungsgebühr"
}
},
"operationList" : {
@@ -4882,7 +4887,7 @@
"rules" : {
"1" : "Planen Sie 30 Minuten ein und nehmen Sie sich Zeit.",
"2" : "Nehmen Sie einen Stift zum Schreiben.",
- "3" : "Bleiben Sie allein, und wählen Sie eine sichere und ruhige Umgebung."
+ "3" : "Sei allein und wähle eine sichere und ruhige Umgebung."
},
"buttons" : {
"next" : "OK, ich bin bereit!",
@@ -5511,6 +5516,11 @@
"memo" : "Tag/Memo",
"memoPlaceholder" : "Optional",
"requiredMemoPlaceholder" : "Erforderlich"
+ },
+ "mina" : {
+ "memoPlaceholder" : "Optional",
+ "memo" : "Memo",
+ "memoWarningText" : "Der Wert von Memo kann eine Zeichenfolge mit maximal 32 Zeichen sein"
}
},
"errors" : {
@@ -5943,7 +5953,7 @@
"description" : "Bitte versuche es noch einmal oder wende dich an den Ledger-Kundenservice."
},
"DeviceShouldStayInApp" : {
- "title" : "Bitte öffnen Sie die {{appName}} App",
+ "title" : "Bitte öffne die {{appName}} App",
"description" : "Lassen Sie die App {{appName}} geöffnet, während wir Ihre Konten finden"
},
"UnexpectedBootloader" : {
@@ -6111,7 +6121,7 @@
},
"BtcUnmatchedApp" : {
"title" : "Das ist die falsche App",
- "description" : "Öffnen Sie die App „{{managerAppName}}“ auf Ihrem Gerät"
+ "description" : "Öffne die App „{{managerAppName}}“ auf deinem Gerät"
},
"DeviceNameInvalid" : {
"title" : "Bitte wählen Sie einen Gerätenamen ohne '{{invalidCharacters}}'"
@@ -6220,7 +6230,7 @@
"title" : "Kontostand darf nicht unter {{minimumAmount}} liegen"
},
"WrongAppForCurrency" : {
- "title" : "Bitte öffnen Sie die {{expected}} App"
+ "title" : "Bitte öffne die {{expected}} App"
},
"FeeTooHigh" : {
"title" : "Die Netzwerkgebühren liegen über 10 % des Betrags"
@@ -6541,6 +6551,15 @@
"swap" : "Swappen",
"deposit" : "Einzahlen"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "Der Memotext darf nicht länger als 32 Zeichen sein."
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Für diese Transaktion fällt eine Kontoerstellungsgebühr in Höhe von {{fee}} an"
+ },
+ "AmountTooSmall" : {
+ "title" : "Der Mindestbetrag für diese Transaktion beläuft sich auf {{amount}}"
}
},
"cryptoOrg" : {
@@ -6637,7 +6656,7 @@
},
"progress" : {
"loading" : "Lade Daten...",
- "progress" : "Bleiben Sie auf Ledger Live, während die Apps installiert werden.",
+ "progress" : "Bleibe auf Ledger Live, während die Apps installiert werden.",
"disclaimer" : "Sie können jederzeit Apps aus Ledger Live hinzufügen oder entfernen.",
"skippedInfo" : "Einige Apps sind nicht verfügbar. Sie müssen noch entwickelt werden für {{ productName }}.",
"skipped" : "Noch nicht verfügbar für {{ productName }}",
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "Zeit für ein Upgrade",
- "description" : "Jetzt auf eines unserer aktuellen Geräte aufrüsten: <0>{{discount}} % Rabatt0> für mehr Sicherheit und ein nahtloses Erlebnis.",
- "cta" : "Neue Wallet zulegen",
- "linkText" : "Weitere Informationen"
- },
- "optOut" : {
- "title" : "Zeit für ein Upgrade",
- "description" : "Jetzt auf eines unserer aktuellen Geräte aufrüsten: <0>{{discount}} % Rabatt0> für mehr Sicherheit und ein nahtloses Erlebnis.",
- "cta" : "Neue Wallet zulegen",
- "linkText" : "Weitere Informationen"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "Zeit für ein Upgrade",
- "description" : "Bald gibt es keine Updates mehr für die Ledger Nano S. Jetzt auf eines unserer aktuellen Geräte aufrüsten – mit <0>{{discount}} % Rabatt0>.",
- "cta" : "Neue Wallet zulegen",
- "linkText" : "Weitere Informationen"
- },
- "optOut" : {
- "title" : "Zeit für ein Upgrade",
- "description" : "Bald gibt es keine Updates mehr für die Ledger Nano S. Jetzt auf eines unserer aktuellen Geräte aufrüsten – mit <0>{{discount}} % Rabatt0>.",
- "cta" : "Neue Wallet zulegen",
- "linkText" : "Weitere Informationen"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "Zeit für ein Upgrade",
- "description" : "Jetzt auf eines unserer aktuellen Geräte aufrüsten: <0>{{discount}} % Rabatt0> für mehr Sicherheit und ein nahtloses Erlebnis.",
- "cta" : "Neue Wallet zulegen",
- "linkText" : "Weitere Informationen"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "Updates gibt es nicht mehr lange. Jetzt aufrüsten: <0>{{discount}} % Rabatt0> für ein nahtloses Erlebnis.",
- "cta" : "Neue Wallet zulegen",
- "linkText" : "Weitere Informationen"
- },
- "optOut" : {
- "description" : "Updates gibt es nicht mehr lange. Jetzt aufrüsten: <0>{{discount}} % Rabatt0> für ein nahtloses Erlebnis.",
- "cta" : "Neue Wallet zulegen",
- "linkText" : "Weitere Informationen"
- }
- }
+ "opted_in" : {
+ "title" : "Eingeschränkter Speicher, eingeschränkte Nutzung",
+ "description" : "Führe ein Upgrade deiner Ledger Nano S auf ein neueres Ledger-Gerät durch – z. B. die Ledger Flex – und profitiere von mehr Speicherplatz, den neuesten Sicherheitsverbesserungen, innovativen Funktionen und <0>einem exklusiven Rabatt in Höhe von {{discount}} %>.",
+ "cta" : "Ledger-Upgrade durchführen"
+ },
+ "opted_out" : {
+ "description" : "Der begrenzte Speicher deiner Ledger Nano S schränkt deinen Zugang zu aktuellen Funktionen, Blockchain-Änderungen und Sicherheitsverbesserungen ein. Für die längerfristige Nutzung solltest du auf ein neueres Ledger-Gerät aufrüsten.",
+ "cta" : "Weitere Informationen"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/en/app.json b/apps/ledger-live-desktop/static/i18n/en/app.json
index 48c68a7608e6..1a78db338556 100644
--- a/apps/ledger-live-desktop/static/i18n/en/app.json
+++ b/apps/ledger-live-desktop/static/i18n/en/app.json
@@ -1879,7 +1879,8 @@
"palletMethod": "Method",
"transferAmount": "Transfer Amount",
"validatorsCount": "Validators ({{number}})",
- "version": "Version"
+ "version": "Version",
+ "accountCreationFee": "Account Creation Fee"
}
},
"operationList": {
@@ -5539,6 +5540,11 @@
"memo": "Tag / Memo",
"memoPlaceholder": "Optional",
"requiredMemoPlaceholder": "Required"
+ },
+ "mina": {
+ "memoPlaceholder": "Optional",
+ "memo": "Memo",
+ "memoWarningText": "The value of memo can be a string shorter than or equal to 32 characters"
}
},
"errors": {
@@ -6569,6 +6575,15 @@
"swap": "Swap",
"deposit": "Deposit"
}
+ },
+ "InvalidMemoMina": {
+ "title": "Memo text cannot be longer than 32 characters"
+ },
+ "AccountCreationFeeWarning": {
+ "title": "This transaction will incur an account creation fee of {{fee}}"
+ },
+ "AmountTooSmall": {
+ "title": "Minimum required amount for this transaction is {{amount}}"
}
},
"cryptoOrg": {
diff --git a/apps/ledger-live-desktop/static/i18n/es/app.json b/apps/ledger-live-desktop/static/i18n/es/app.json
index 321ad8d29fd7..5de2177f5eb9 100644
--- a/apps/ledger-live-desktop/static/i18n/es/app.json
+++ b/apps/ledger-live-desktop/static/i18n/es/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "El Ledger Nano S™ no es compatible con {{provider}}",
- "description" : "El Ledger Nano S no es compatible con {{provider}}. Puedes usar el Ledger Nano S Plus, el Ledger Nano X, el Ledger Stax o el Ledger Flex para permutas intercadena en {{provider}} desde Ledger Live.",
+ "description" : "El Ledger Nano S™ no es compatible con {{provider}}. Puedes usar el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Stax™ o el Ledger Flex™ para permutas intercadena en {{provider}} desde Ledger Live.",
"cta" : "Explorar dispositivos compatibles",
"changeProvider" : "Permutar con otro proveedor"
},
@@ -449,8 +449,8 @@
"ton_description" : "Para permutar Ton, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
"spl_tokens_title" : "No es posible utilizar el Ledger Nano S™ para permutar tokens de Solana",
"spl_tokens_description" : "Para permutar tokens de Solana, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "No es posible utilizar el Ledger Nano S™ para permutar tokens de Sui",
+ "sui_tokens_description" : "Para permutar tokens de Sui, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
"near_title" : "No es posible usar el Ledger Nano S™ para permutar Near",
"near_description" : "Para permutar Near, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
"ada_title" : "No es posible utilizar el Ledger Nano S™ para permutar Cardano",
@@ -459,12 +459,12 @@
"apt_description" : "Para permutar Aptos, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
"cosmos_title" : "No es posible usar el Ledger Nano S™ para permutar Cosmos",
"cosmos_description" : "Para permutar Cosmos, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "No es posible usar el Ledger Nano S™ para permutar Osmosis",
+ "osmo_description" : "Para permutar Osmosis, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
+ "dydx_title" : "No es posible usar el Ledger Nano S™ para permutar dYdX",
+ "dydx_description" : "Para permutar dYdX, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
+ "sui_title" : "No es posible utilizar el Ledger Nano S™ para permutar Sui",
+ "sui_description" : "Para permutar Sui, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™."
},
"providers" : {
"title" : "Elige un proveedor para permutar cripto",
@@ -776,6 +776,10 @@
"description3Link" : "Esta integración la ha realizado <1><0>{{team}}0>1> en colaboración con Ledger"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} está migrando a {{to}}. Visita este <0>enlace0> para obtener más información o contacta con el equipo de soporte si necesitas ayuda.",
+ "contactSupport" : "Ponte en contacto con Soporte"
+ },
"featureUnavailable" : {
"title" : "La siguiente opción está temporalmente deshabilitada: {{feature}}. Si quieres obtener más información, contacta con {{support}}.",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "Método",
"transferAmount" : "Transferir importe",
"validatorsCount" : "Validadores ({{number}})",
- "version" : "Versión"
+ "version" : "Versión",
+ "accountCreationFee" : "Tarifa de creación de cuenta"
}
},
"operationList" : {
@@ -2049,7 +2054,7 @@
"dontHaveSeed" : "¿No tienes tu Frase de Recuperación? ",
"followTheGuide" : "Sigue nuestra Guía de actualización paso a paso",
"removeApps" : "Desinstalar todas las aplicaciones antes de actualizar",
- "update" : "Actualización del SO del {{productName}",
+ "update" : "Actualización de SO de {{productName}}",
"updateBtn" : "Actualizar firmware",
"installUpdate" : "Instalar actualización",
"banner" : {
@@ -5511,6 +5516,11 @@
"memo" : "Etiqueta/memo",
"memoPlaceholder" : "Opcional",
"requiredMemoPlaceholder" : "Obligatoria"
+ },
+ "mina" : {
+ "memoPlaceholder" : "Opcional",
+ "memo" : "Memo",
+ "memoWarningText" : "El valor de un memo debe ser una cadena de 32 caracteres como máximo"
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "Permutar",
"deposit" : "Depositar"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "El texto de un memo no debe superar los 32 caracteres"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Esta transacción conlleva asociada una tarifa de creación de cuenta de {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "La cantidad mínima necesaria para esta transacción es de {{amount}}"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "Es hora de actualizar",
- "description" : "Pásate a uno de nuestros nuevos dispositivos con un <0>{{discount}}% de descuento0> y disfruta de más seguridad sin complicaciones.",
- "cta" : "Renovar mi billetera",
- "linkText" : "Más información"
- },
- "optOut" : {
- "title" : "Es hora de actualizar",
- "description" : "Pásate a uno de nuestros nuevos dispositivos con un <0>{{discount}}% de descuento0> y disfruta de más seguridad sin complicaciones.",
- "cta" : "Renovar mi billetera",
- "linkText" : "Más información"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "Es hora de actualizar",
- "description" : "Pronto dejará de haber actualizaciones para el Ledger Nano S. Pásate a uno de nuestros nuevos dispositivos con un <0>{{discount}}% de descuento0>.",
- "cta" : "Renovar mi billetera",
- "linkText" : "Más información"
- },
- "optOut" : {
- "title" : "Es hora de actualizar",
- "description" : "Pronto dejará de haber actualizaciones para el Ledger Nano S. Pásate a uno de nuestros nuevos dispositivos con un <0>{{discount}}% de descuento0>.",
- "cta" : "Renovar mi billetera",
- "linkText" : "Más información"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "Es hora de actualizar",
- "description" : "Pásate a uno de nuestros nuevos dispositivos con un <0>{{discount}}% de descuento0> y disfruta de más seguridad sin complicaciones.",
- "cta" : "Renovar mi billetera",
- "linkText" : "Más información"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "Pronto dejará de haber actualizaciones. Renueva ahora con un {{discount}}% de descuento y disfruta de una experiencia más fluida.",
- "cta" : "Renovar mi billetera",
- "linkText" : "Más información"
- },
- "optOut" : {
- "description" : "Pronto dejará de haber actualizaciones. Renueva ahora con un {{discount}}% de descuento y disfruta de una experiencia más fluida.",
- "cta" : "Renovar mi billetera",
- "linkText" : "Más información"
- }
- }
+ "opted_in" : {
+ "title" : "Si la memoria es limitada, la experiencia también lo será",
+ "description" : "Actualiza tu Ledger Nano S a un dispositivo Ledger más moderno, como el Ledger Flex, para disponer de más memoria, mejoras de seguridad más recientes y nuevas funciones. También tenemos reservado, sólo para ti, un <0>{{discount}}% de descuento>.",
+ "cta" : "Renovar mi Ledger"
+ },
+ "opted_out" : {
+ "description" : "La memoria limitada de tu Ledger Nano S restringe tu acceso a las opciones más recientes, a cambios en la blockchain y a mejoras de seguridad. Cambia a un dispositivo Ledger más moderno para garantizar un uso prolongado.",
+ "cta" : "Más información"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/fr/app.json b/apps/ledger-live-desktop/static/i18n/fr/app.json
index 19368c14283e..8b93d41cb632 100644
--- a/apps/ledger-live-desktop/static/i18n/fr/app.json
+++ b/apps/ledger-live-desktop/static/i18n/fr/app.json
@@ -449,8 +449,8 @@
"ton_description" : "Pour échanger des TON, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"spl_tokens_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de tokens Solana",
"spl_tokens_description" : "Pour échanger des tokens Solana, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de tokens Sui",
+ "sui_tokens_description" : "Pour échanger des tokens Sui, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"near_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de NEAR",
"near_description" : "Pour échanger des NEAR, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"ada_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de Cardano",
@@ -459,12 +459,12 @@
"apt_description" : "Pour échanger des Aptos, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"cosmos_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de Cosmos",
"cosmos_description" : "Pour échanger des Cosmos, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange d’Osmosis",
+ "osmo_description" : "Pour échanger des Osmosis, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "dydx_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de dYdX",
+ "dydx_description" : "Pour échanger des dYdX, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "sui_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de Sui",
+ "sui_description" : "Pour échanger des Sui, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™."
},
"providers" : {
"title" : "Choisir un prestataire pour le swap",
@@ -776,6 +776,10 @@
"description3Link" : "Cette intégration a été réalisée par <1><0>{{team}}0>1> en collaboration avec Ledger."
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} migre vers {{to}}. Cliquez <0>ici0> pour en savoir plus ou contactez l’Assistance si vous avez besoin d’aide.",
+ "contactSupport" : "Contacter l’Assistance"
+ },
"featureUnavailable" : {
"title" : "La fonctionnalité suivante est temporairement indisponible : {{feature}}. Pour plus d’informations, veuillez contacter l’{{support}}.",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "Méthode",
"transferAmount" : "Montant transféré",
"validatorsCount" : "Validateurs ({{number}})",
- "version" : "Version"
+ "version" : "Version",
+ "accountCreationFee" : "Frais de création de compte"
}
},
"operationList" : {
@@ -5511,6 +5516,11 @@
"memo" : "Tag/mémo",
"memoPlaceholder" : "Facultatif",
"requiredMemoPlaceholder" : "Requis"
+ },
+ "mina" : {
+ "memoPlaceholder" : "Facultatif",
+ "memo" : "Mémo",
+ "memoWarningText" : "Le mémo peut être une séquence de caractères inférieure ou égale à 32 caractères"
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "Échangez",
"deposit" : "Déposez"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "Le mémo ne peut pas dépasser 32 caractères"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Les frais de création de compte pour cette transaction s’élèveront à {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "Le montant minimal requis pour cette transaction est {{amount}}"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "Passez au niveau supérieur",
- "description" : "Bénéficiez de <0>-{{discount}}% de réduction0> sur nos wallets dernière génération. Passez à une expérience plus fluide et plus sécurisée dès maintenant.",
- "cta" : "Choisir mon nouveau wallet",
- "linkText" : "En savoir plus"
- },
- "optOut" : {
- "title" : "Passez au niveau supérieur",
- "description" : "Bénéficiez de <0>-{{discount}}% de réduction0> sur nos wallets dernière génération. Passez à une expérience plus fluide et plus sécurisée dès maintenant.",
- "cta" : "Choisir mon nouveau wallet",
- "linkText" : "En savoir plus"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "Passez au niveau supérieur",
- "description" : "Le Ledger Nano S ne recevra bientôt plus de mises à jour. Bénéficiez de <0>-{{discount}}% de réduction0> sur nos derniers wallets.",
- "cta" : "Choisir mon nouveau wallet",
- "linkText" : "En savoir plus"
- },
- "optOut" : {
- "title" : "Passez au niveau supérieur",
- "description" : "Le Ledger Nano S ne recevra bientôt plus de mises à jour. Bénéficiez de <0>-{{discount}}% de réduction0> sur nos derniers wallets.",
- "cta" : "Choisir mon nouveau wallet",
- "linkText" : "En savoir plus"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "Passez au niveau supérieur",
- "description" : "Bénéficiez de <0>-{{discount}}% de réduction0> sur nos wallets dernière génération. Passez à une expérience plus fluide et plus sécurisée dès maintenant.",
- "cta" : "Choisir mon nouveau wallet",
- "linkText" : "En savoir plus"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "Les mises à jour s’arrêtent bientôt. Pour une expérience fluide, passez à un wallet supérieur, avec -{{discount}}% de réduction.",
- "cta" : "Choisir mon nouveau wallet",
- "linkText" : "En savoir plus"
- },
- "optOut" : {
- "description" : "Les mises à jour s’arrêtent bientôt. Pour une expérience fluide, passez à un wallet supérieur, avec -{{discount}}% de réduction.",
- "cta" : "Choisir mon nouveau wallet",
- "linkText" : "En savoir plus"
- }
- }
+ "opted_in" : {
+ "title" : "Mémoire limitée, expérience limitée",
+ "description" : "Passez du Ledger Nano S à un modèle plus récent, tel que le Ledger Flex. À la clé : plus de mémoire, les dernières améliorations de sécurité, de nouvelles fonctionnalités et <0>une réduction exclusive de {{discount}}%0>.",
+ "cta" : "Choisir mon wallet"
+ },
+ "opted_out" : {
+ "description" : "Avec sa mémoire limitée, votre Ledger Nano S vous prive des dernières fonctionnalités, innovations blockchain et améliorations de sécurité. Pour en bénéficier, choisissez un wallet Ledger plus récent.",
+ "cta" : "En savoir plus"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/ja/app.json b/apps/ledger-live-desktop/static/i18n/ja/app.json
index 374b298bb4b3..c67af546e728 100644
--- a/apps/ledger-live-desktop/static/i18n/ja/app.json
+++ b/apps/ledger-live-desktop/static/i18n/ja/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "Ledger Nano S™は、{{provider}}に対応していません",
- "description" : "Ledger Nano Sは、{{provider}}に対応していませんLedger Nano S Plus、Ledger Nano X、Ledger Stax、またはLedger Flexを使用して、Ledger Liveから{{provider}}でのクロスチェーンスワップが可能です",
+ "description" : "Ledger Nano S™は、{{provider}}に対応していません。Ledger Nano S Plus™、Ledger Nano X™、Ledger Stax™、またはLedger Flex™を使用して、Ledger Liveから{{provider}}でのクロスチェーンスワップが可能です",
"cta" : "対応デバイスを探す",
"changeProvider" : "別のプロバイダーでスワップ"
},
@@ -449,8 +449,8 @@
"ton_description" : "Tonをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、またはLedger Stax™など、他の対応するLedgerデバイスをご使用ください。",
"spl_tokens_title" : "Ledger Nano S™はSolanaトークンのスワップに対応していません",
"spl_tokens_description" : "Solanaトークンをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、またはLedger Stax™など、他の対応するLedgerデバイスをご使用ください。",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "Ledger Nano S™は、Suiトークンのスワップに対応していません",
+ "sui_tokens_description" : "Suiトークンをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、またはLedger Stax™など、他の対応するLedgerデバイスをご使用ください。",
"near_title" : "Ledger Nano S™はNearのスワップに対応していません",
"near_description" : "Nearをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
"ada_title" : "Ledger Nano S™はCardanoのスワップに対応していません",
@@ -459,12 +459,12 @@
"apt_description" : "Aptosをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
"cosmos_title" : "Ledger Nano S™はCosmosのスワップに対応していません",
"cosmos_description" : "Cosmosをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™は、Osmosisのスワップに対応していません",
+ "osmo_description" : "Osmosisをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
+ "dydx_title" : "Ledger Nano S™は、dYdXのスワップに対応していません",
+ "dydx_description" : "dYdXをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
+ "sui_title" : "Ledger Nano S™は、Suiのスワップに対応していません",
+ "sui_description" : "Suiをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、またはLedger Stax™など、他の対応するLedgerデバイスをご使用ください。"
},
"providers" : {
"title" : "暗号資産のスワップに利用するプロバイダーを選択",
@@ -776,6 +776,10 @@
"description3Link" : "この統合は、<1><0>{{team}}0>1>がLedgerと共同で実施しました"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}}は{{to}}に移行しています。詳細については、こちらの<0>リンク0>をご参照いただくか、必要に応じてサポートにお問い合わせください。",
+ "contactSupport" : "サポートへお問い合わせ"
+ },
"featureUnavailable" : {
"title" : "次の機能は一時的にご利用いただけません:{{feature}}。詳しくは{{support}}をご覧ください",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "方法",
"transferAmount" : "送付額",
"validatorsCount" : "バリデータ({{number}})",
- "version" : "バージョン"
+ "version" : "バージョン",
+ "accountCreationFee" : "アカウント作成手数料"
}
},
"operationList" : {
@@ -2049,7 +2054,7 @@
"dontHaveSeed" : "リカバリーフレーズをお持ちでないですか? ",
"followTheGuide" : "アップデートの手順はこちらをご覧ください。",
"removeApps" : "アップデート前に全アプリをアンインストールする",
- "update" : "{{productName}} OSアップデート",
+ "update" : "{{productName}}OSアップデート",
"updateBtn" : "ファームウェアをアップデート",
"installUpdate" : "アップデートをインストール",
"banner" : {
@@ -5511,6 +5516,11 @@
"memo" : "タグ/メモ",
"memoPlaceholder" : "任意",
"requiredMemoPlaceholder" : "必須"
+ },
+ "mina" : {
+ "memoPlaceholder" : "任意",
+ "memo" : "メモ",
+ "memoWarningText" : "メモの値は32文字以内の文字列で入力可能です"
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "スワップ",
"deposit" : "入金"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "メモに入力できる文字数は32文字以内です"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "このトランザクションには、{{fee}}のアカウント作成手数料が発生します"
+ },
+ "AmountTooSmall" : {
+ "title" : "このトランザクションに最低限必要な金額は、{{amount}}です"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "アップグレードに絶好のチャンス!",
- "description" : "<0>{{discount}}%割引0>で、当社の最新のデバイスにアップグレードしましょう!より使いやすく、強化されたセキュリティをお楽しみいただけます。",
- "cta" : "ウォレットをレベルアップ",
- "linkText" : "詳細はこちら"
- },
- "optOut" : {
- "title" : "アップグレードに絶好のチャンス!",
- "description" : "<0>{{discount}}%割引0>で、当社の最新のデバイスにアップグレードしましょう!より使いやすく、強化されたセキュリティをお楽しみいただけます。",
- "cta" : "ウォレットをレベルアップ",
- "linkText" : "詳細はこちら"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "絶好のアップグレードチャンス!",
- "description" : "Ledger Nano Sのアップデートが間もなく終了します。<0>{{discount}}%OFF0>で、最新デバイスにアップグレードしましょう。",
- "cta" : "ウォレットをレベルアップ",
- "linkText" : "詳細はこちら"
- },
- "optOut" : {
- "title" : "絶好のアップグレードチャンス!",
- "description" : "Ledger Nano Sのキャンペーンは間もなく終了です。<0>{{discount}}%OFF0>で、当社の最新デバイスにアップグレードできます。",
- "cta" : "ウォレットをレベルアップ",
- "linkText" : "詳細はこちら"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "アップグレードに絶好のチャンス!",
- "description" : "<0>{{discount}}%割引0>で、最新のデバイスにアップグレードしましょう!より使いやすく、強化されたセキュリティをお楽しみいただけます。",
- "cta" : "ウォレットをレベルアップ",
- "linkText" : "詳細はこちら"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "キャンペーンがまもなく終了します。今ならデバイスのアップグレードが{{discount}}%OFF!より快適な体験をお楽しみいただけます。",
- "cta" : "ウォレットをレベルアップ",
- "linkText" : "詳細はこちら"
- },
- "optOut" : {
- "description" : "キャンペーンは間もなく終了します。今ならデバイスのアップグレードが{{discount}}%OFF!より快適な体験をお楽しみいただけます。",
- "cta" : "ウォレットをレベルアップ",
- "linkText" : "詳細はこちら"
- }
- }
+ "opted_in" : {
+ "title" : "メモリ不足による制限",
+ "description" : "お持ちのLedger Nano Sを最新のLedger(Ledger Flexなど)にアップグレードしましょう!より多くのメモリ、最新のセキュリティ強化、複数の新機能をお楽しみいただけます。今なら、<0>{{discount}}%OFF0>。",
+ "cta" : "Ledgerをアップグレード"
+ },
+ "opted_out" : {
+ "description" : "Ledger Nano Sの限られたメモリでは、複数の最新機能、ブロックチェーンの変更、セキュリティ強化も制限されます。ぜひ、新しいLedgerデバイスへのアップグレードをご検討ください。",
+ "cta" : "詳細はこちら"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/ko/app.json b/apps/ledger-live-desktop/static/i18n/ko/app.json
index 1f6b2cead8fb..51c7d38196e0 100644
--- a/apps/ledger-live-desktop/static/i18n/ko/app.json
+++ b/apps/ledger-live-desktop/static/i18n/ko/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "Ledger Nano S™는 {{provider}}와(과) 호환되지 않습니다",
- "description" : "Ledger Nano S는 {{provider}}와(과) 호환되지 않습니다 Ledger Nano S Plus, Ledger Nano X, Ledger Stax, 또는 Ledger Flex로 Ledger Live를 통해 {{provider}}에서 크로스체인 스왑을 경험할 수 있습니다",
+ "description" : "Ledger Nano S™는 {{provider}}와(과) 호환되지 않습니다 Ledger Nano S Plus™, Ledger Nano X™, Ledger Stax™, 또는 Ledger Flex™로 Ledger Live를 통해 {{provider}}에서 크로스체인 스왑을 경험할 수 있습니다",
"cta" : "호환 가능한 장치 탐색",
"changeProvider" : "다른 공급자를 통해 스왑"
},
@@ -449,8 +449,8 @@
"ton_description" : "Ton을 스왑하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 호환 Ledger 장치를 사용하세요.",
"spl_tokens_title" : "Ledger Nano S™는 솔라나 토큰 스왑을 지원하지 않습니다.",
"spl_tokens_description" : "솔라노 토큰을 스왑하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 호환 Ledger 장치를 사용하세요.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "Ledger Nano S™는 Sui 토큰 스왑을 지원하지 않습니다.",
+ "sui_tokens_description" : "Sui 토큰을 스왑하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 호환 Ledger 장치를 사용하세요.",
"near_title" : "Ledger Nano S™는 Near 스왑을 지원하지 않습니다.",
"near_description" : "Near 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
"ada_title" : "Ledger Nano S™는 카르다노 스왑을 지원하지 않습니다.",
@@ -459,12 +459,12 @@
"apt_description" : "Aptos 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
"cosmos_title" : "Ledger Nano S™는 Cosmos 스왑을 지원하지 않습니다.",
"cosmos_description" : "Cosmos 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™는 Osmosis 스왑을 지원하지 않습니다.",
+ "osmo_description" : "Osmosis 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
+ "dydx_title" : "Ledger Nano S™는 dYdX 스왑을 지원하지 않습니다.",
+ "dydx_description" : "dYdX 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
+ "sui_title" : "Ledger Nano S™는 Sui 스왑을 지원하지 않습니다",
+ "sui_description" : "Sui 스왑 거래를 수행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 호환 Ledger 장치를 사용하세요."
},
"providers" : {
"title" : "암호화폐를 스왑할 공급자를 선택하세요",
@@ -776,6 +776,10 @@
"description3Link" : "이 통합은 Ledger와 협력을 통해 <1><0>{{team}}0>1>에서 수행했습니다."
}
},
+ "migrationBanner" : {
+ "title" : "{{from}}가 {{to}}으로 마이그레이션되고 있습니다. <0>이 링크0>에서 자세한 내용을 알아보고, 도움이 필요한 경우 지원팀에 문의하세요.",
+ "contactSupport" : "지원 부서 연락"
+ },
"featureUnavailable" : {
"title" : "다음의 {{feature}} 기능은 현재 이용하실 수 없습니다. 자세한 내용은 {{support}}에 문의하세요",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "방법",
"transferAmount" : "이전 금액",
"validatorsCount" : "검증인 ({{number}})",
- "version" : "버전"
+ "version" : "버전",
+ "accountCreationFee" : "계정 생성 수수료"
}
},
"operationList" : {
@@ -2049,7 +2054,7 @@
"dontHaveSeed" : "복구 문구가 없나요? ",
"followTheGuide" : "단계별 업데이트 가이드를 따르세요",
"removeApps" : "모든 앱을 삭제하고 업데이트하세요",
- "update" : "{{productName} OS 업데이트",
+ "update" : "{{productName}} OS 업데이트",
"updateBtn" : "펌웨어를 업데이트하세요",
"installUpdate" : "업데이트 설치",
"banner" : {
@@ -5511,6 +5516,11 @@
"memo" : "태그 / 메모",
"memoPlaceholder" : "선택 사항",
"requiredMemoPlaceholder" : "필수 항목"
+ },
+ "mina" : {
+ "memoPlaceholder" : "선택 사항",
+ "memo" : "메모",
+ "memoWarningText" : "메모 값은 32자 이하의 문자열일 수 있습니다."
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "스왑",
"deposit" : "입금"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "메모 텍스트는 32자를 초과할 수 없습니다."
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "이 트랜잭션에는 {{fee}}의 계정 생성 수수료가 부과됩니다."
+ },
+ "AmountTooSmall" : {
+ "title" : "이 트랜잭션에 필요한 최소 금액은 {{amount}}입니다"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "장치 업그레이드 기회",
- "description" : "최신 장치로 업그레이드하고 <0>{{discount}}% 할인 혜택0>은 물론, 더 향상된 보안력과 원활한 사용자 경험을 누려보세요.",
- "cta" : "내 지갑 업그레이드하기",
- "linkText" : "자세히 알아보기"
- },
- "optOut" : {
- "title" : "장치 업그레이드 기회",
- "description" : "최신 장치로 업그레이드하고 <0>{{discount}}% 할인 혜택0>은 물론, 더 향상된 보안력과 원활한 사용자 경험을 누려보세요.",
- "cta" : "내 지갑 업그레이드하기",
- "linkText" : "자세히 알아보기"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "장치 업그레이드 기회",
- "description" : "Ledger Nano S 업데이트가 곧 종료됩니다. 최신 장치로 업그레이드하고 <0>{{discount}}% 할인 혜택0>까지 누리세요.",
- "cta" : "내 지갑 업그레이드하기",
- "linkText" : "자세히 알아보기"
- },
- "optOut" : {
- "title" : "장치 업그레이드 기회",
- "description" : "Ledger Nano S 업데이트가 곧 종료됩니다. 최신 장치로 업그레이드하고 <0>{{discount}}% 할인 혜택0>까지 누리세요.",
- "cta" : "내 지갑 업그레이드하기",
- "linkText" : "자세히 알아보기"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "장치 업그레이드 기회",
- "description" : "최신 장치로 업그레이드하고 <0>{{discount}}% 할인 혜택0>은 물론, 더 향상된 보안력과 원활한 사용자 경험을 누려보세요.",
- "cta" : "내 지갑 업그레이드하기",
- "linkText" : "자세히 알아보기"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "업데이트가 곧 종료됩니다. 지급 업그레이드하고 {{discount}}% 할인 혜택은 물론, 더 원활한 사용자 경험을 즐겨보세요.",
- "cta" : "내 지갑 업그레이드하기",
- "linkText" : "자세히 알아보기"
- },
- "optOut" : {
- "description" : "업데이트가 곧 종료됩니다. 지급 업그레이드하고 {{discount}}% 할인 혜택은 물론, 더 원활한 사용자 경험을 즐겨보세요.",
- "cta" : "내 지갑 업그레이드하기",
- "linkText" : "자세히 알아보기"
- }
- }
+ "opted_in" : {
+ "title" : "메모리가 제한되면 경험도 제한되니까요",
+ "description" : "Ledger Nano S를 Ledger Flex와 같은 최신 Ledger 장치로 업그레이드하여 더 커진 메모리, 최신 보안 업데이트, 새로운 기능 및 <0>독점 {{discount}}% 할인 혜택>까지 모두 누려보세요.",
+ "cta" : "내 Ledger 업그레이드"
+ },
+ "opted_out" : {
+ "description" : "Ledger Nano S의 제한된 메모리로 인해 최신 기능, 블록체인 변경 사항 및 보안 업데이트에 대한 액세스가 제한됩니다. 장기적으로 사용하려면 최신 Ledger 장치로 업그레이드하세요.",
+ "cta" : "자세히 알아보기"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/pt/app.json b/apps/ledger-live-desktop/static/i18n/pt/app.json
index 14c4e7c1823e..1e6d2bb4c972 100644
--- a/apps/ledger-live-desktop/static/i18n/pt/app.json
+++ b/apps/ledger-live-desktop/static/i18n/pt/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "A Ledger Nano S™ não é compatível com {{provider}}",
- "description" : "A Ledger Nano S não é compatível com {{provider}}. Você pode usar a Ledger Nano S Plus, a Ledger Nano X, Ledger Stax ou a Ledger Flex para realizar trocas cross-chain via {{provider}} através do Ledger Live",
+ "description" : "A Ledger Nano S™ não é compatível com {{provider}}. Você pode usar a Ledger Nano S Plus™, a Ledger Nano X™, Ledger Stax™ ou a Ledger Flex™ para realizar trocas cross-chain via {{provider}} através do Ledger Live",
"cta" : "Conheça os dispositivos compatíveis",
"changeProvider" : "Trocar com outro provedor"
},
@@ -449,8 +449,8 @@
"ton_description" : "Para trocar Ton, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"spl_tokens_title" : "A Ledger Nano S™ não é compatível com a troca de tokens Solana",
"spl_tokens_description" : "Para trocar tokens Solana, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "A Ledger Nano S™ não é compatível com a troca de tokens Sui",
+ "sui_tokens_description" : "Para trocar tokens Sui, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"near_title" : "A Ledger Nano S™ não é compatível com trocas de Near",
"near_description" : "Para trocar o ativo Near, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"ada_title" : "A Ledger Nano S™ não é compatível com a troca de Cardano",
@@ -459,12 +459,12 @@
"apt_description" : "Para trocar o ativo APTOS, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"cosmos_title" : "A Ledger Nano S™ não é compatível com a troca de Cosmos",
"cosmos_description" : "Para trocar Cosmos, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "A Ledger Nano S™ não é compatível com a troca de Osmosis",
+ "osmo_description" : "Para trocar Osmosis, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "dydx_title" : "A Ledger Nano S™ não é compatível com trocas de dYdX",
+ "dydx_description" : "Para trocar o ativo dYdX, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "sui_title" : "A Ledger Nano S™ não é compatível com a troca de Sui",
+ "sui_description" : "Para trocar Sui, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™."
},
"providers" : {
"title" : "Escolha um provedor para trocar cripto",
@@ -776,6 +776,10 @@
"description3Link" : "Esta integração foi realizada por <1><0>{{team}}0>1> em colaboração com a Ledger"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} está migrando para {{to}}. Siga este <0>link0> para saber mais ou entre em contato com o suporte se precisar de ajuda.",
+ "contactSupport" : "Falar com o suporte"
+ },
"featureUnavailable" : {
"title" : "O seguinte recurso está momentaneamente indisponível: {{feature}}. Para saber mais, consulte o {{support}}",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "Método",
"transferAmount" : "Transferir Quantia",
"validatorsCount" : "Validadores ({{number}})",
- "version" : "Versão"
+ "version" : "Versão",
+ "accountCreationFee" : "Taxa de Criação de Conta"
}
},
"operationList" : {
@@ -2049,7 +2054,7 @@
"dontHaveSeed" : "Não está com sua frase de recuperação? ",
"followTheGuide" : "Siga nosso guia passo a passo de atualização",
"removeApps" : "Desinstale todos os aplicativos antes de atualizar",
- "update" : "Atualização do sistema operacional da {{productName}}",
+ "update" : "Atualização de OS da {{productName}}",
"updateBtn" : "Atualizar Firmware",
"installUpdate" : "Instalar atualização",
"banner" : {
@@ -5511,6 +5516,11 @@
"memo" : "Tag / Memo",
"memoPlaceholder" : "Opcional",
"requiredMemoPlaceholder" : "Obrigatório"
+ },
+ "mina" : {
+ "memoPlaceholder" : "Opcional",
+ "memo" : "Memo",
+ "memoWarningText" : "O valor do memo pode ser uma string menor ou igual a 32 caracteres"
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "Trocar",
"deposit" : "Depositar"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "O texto do memo não pode ter mais de 32 caracteres"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Esta transação incorrerá em uma taxa de criação de conta de {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "A quantia mínima exigida para esta transação é {{amount}}"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "É hora de subir de nível",
- "description" : "Mude para os nossos dispositivos mais recentes com <0>{{discount}}% de desconto0> e tenha uma segurança aprimorada e uma experiência perfeita.",
- "cta" : "Avançar de carteira",
- "linkText" : "Saiba mais"
- },
- "optOut" : {
- "title" : "É hora de subir de nível",
- "description" : "Avance para um dos nossos dispositivos mais recentes com <0>{{discount}}% de desconto0> e tenha uma segurança aprimorada e uma experiência perfeita.",
- "cta" : "Avançar para uma carteira melhor",
- "linkText" : "Saiba mais"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "É hora de subir de nível",
- "description" : "As atualizações da Ledger Nano S serão encerradas em breve. Mude para os nossos dispositivos mais recentes com <0>{{discount}}% de desconto0>.",
- "cta" : "Avançar de carteira",
- "linkText" : "Saiba mais"
- },
- "optOut" : {
- "title" : "É hora de subir de nível",
- "description" : "As atualizações da Ledger Nano S serão encerradas em breve. Mude para nossos dispositivos mais recentes com <0>{{discount}}% de desconto0>.",
- "cta" : "Avançar de carteira",
- "linkText" : "Saiba mais"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "É hora de subir de nível",
- "description" : "Mude para os nossos dispositivos mais recentes com <0>{{discount}}% de desconto0> e tenha uma segurança aprimorada e uma experiência perfeita.",
- "cta" : "Avançar de carteira",
- "linkText" : "Saiba mais"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "As atualizações serão encerradas em breve. Suba de nível com {{discount}}% de desconto para ter uma experiência perfeita.",
- "cta" : "Avançar de carteira",
- "linkText" : "Saiba mais"
- },
- "optOut" : {
- "description" : "As atualizações serão encerradas em breve. Suba de nível agora com {{discount}}% de desconto para ter uma experiência perfeita.",
- "cta" : "Avançar de carteira",
- "linkText" : "Saiba mais"
- }
- }
+ "opted_in" : {
+ "title" : "Memória limitada, experiência limitada",
+ "description" : "Atualize sua Ledger Nano S para uma Ledger mais nova — como a Ledger Flex — para ter mais memória, melhorias recentes de segurança, novos recursos e <0>um desconto exclusivo de {{discount}}%>.",
+ "cta" : "Atualizar minha Ledger"
+ },
+ "opted_out" : {
+ "description" : "A memória limitada da Ledger Nano S restringe seu acesso aos últimos recursos, mudanças em blockchains e aprimoramentos de segurança. Para uso prolongado, atualize para um dispositivo Ledger mais recente.",
+ "cta" : "Saiba mais"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/ru/app.json b/apps/ledger-live-desktop/static/i18n/ru/app.json
index 4bb163024211..1a2b4496ee6f 100644
--- a/apps/ledger-live-desktop/static/i18n/ru/app.json
+++ b/apps/ledger-live-desktop/static/i18n/ru/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "Ledger Nano S™ не поддерживает {{provider}}.",
- "description" : "Ledger Nano S™ не поддерживает {{provider}}. Для проведения кроссчейн-обмена через {{provider}} внутри Ledger Live используйте Ledger Nano S Plus, Ledger Nano X, Ledger Stax или Ledger Flex.",
+ "description" : "Ledger Nano S™ не поддерживает {{provider}}. Для проведения кроссчейн-обмена через {{provider}} внутри Ledger Live используйте Ledger Nano S Plus™, Ledger Nano X™, Ledger Stax™ или Ledger Flex™.",
"cta" : "Совместимые устройства",
"changeProvider" : "Поменять оператора"
},
@@ -449,8 +449,8 @@
"ton_description" : "Используйте другие совместимые устройства Ledger для обмена TON. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™.",
"spl_tokens_title" : "Ledger Nano S™ не поддерживает обмен токенов сети Solana",
"spl_tokens_description" : "Используйте другие совместимые устройства Ledger для обмена токенов сети Solana. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "Ledger Nano S™ не поддерживает обмен токенов сети Sui",
+ "sui_tokens_description" : "Используйте другие совместимые устройства Ledger для обмена токенов сети Sui. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™.",
"near_title" : "Ledger Nano S™ не поддерживает обмен Near",
"near_description" : "Для обмена Near используйте любое другое устройство Ledger. Это может быть Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ или Ledger Stax™.",
"ada_title" : "Ledger Nano S™ не поддерживает обмен Cardano",
@@ -459,12 +459,12 @@
"apt_description" : "Для обмена Aptos используйте любое другое устройство Ledger. Это может быть Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ или Ledger Stax™.",
"cosmos_title" : "Ledger Nano S™ не поддерживает обмен Cosmos",
"cosmos_description" : "Для обмена Cosmos используйте любое другое устройство Ledger. Это может быть Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ или Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™ не поддерживает обмен Osmosis",
+ "osmo_description" : "Для обмена Osmosis используйте любое другое устройство Ledger. Это может быть Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ или Ledger Stax™.",
+ "dydx_title" : "Ledger Nano S™ не поддерживает обмен dYdX",
+ "dydx_description" : "Используйте другие совместимые устройства Ledger для обмена dYdX. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™.",
+ "sui_title" : "Ledger Nano S™ не поддерживает обмен Sui",
+ "sui_description" : "Используйте другие совместимые устройства Ledger для обмена Sui. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™."
},
"providers" : {
"title" : "Выберите поставщика услуг по обмену криптовалюты",
@@ -776,6 +776,10 @@
"description3Link" : "Эта интеграция проведена <1><0>{{team}}0>1> в сотрудничестве с Ledger."
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} становится {{to}}. Перейдите по <0>ссылке0>, чтобы узнать больше или связаться с Поддержкой при необходимости.",
+ "contactSupport" : "Написать в Поддержку"
+ },
"featureUnavailable" : {
"title" : "В данный момент недоступна эта функция: {{feature}}. Обратитесь в {{support}} за подробностями.",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "Метод",
"transferAmount" : "Сумма",
"validatorsCount" : "Валидаторов: {{number}}",
- "version" : "Версия приложения"
+ "version" : "Версия приложения",
+ "accountCreationFee" : "Комиссия за создание счёта"
}
},
"operationList" : {
@@ -5511,6 +5516,11 @@
"memo" : "Тег примечания/Memo",
"memoPlaceholder" : "Опционально",
"requiredMemoPlaceholder" : "Обязательное поле"
+ },
+ "mina" : {
+ "memoPlaceholder" : "Опционально",
+ "memo" : "Memo",
+ "memoWarningText" : "Значение Memo может быть строкой, длина которой не превышает или равна 32 символам"
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "Обменяйте",
"deposit" : "Пополните"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "Содержимое Memo не может быть длиннее 32 символов"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Эта транзакция предполагает списание комиссии за создание счёта в {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "Минимальная необходимая сумма для этой транзакции — {{amount}}"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "Пора обновиться",
- "description" : "Перейдите на наши новые устройства со <0>скидкой {{discount}}%0> для продвинутой безопасности и удобства использования.",
- "cta" : "Прокачать кошелёк",
- "linkText" : "Подробнее..."
- },
- "optOut" : {
- "title" : "Пора обновиться",
- "description" : "Перейдите на наши новые устройства со <0>скидкой {{discount}}%0> для продвинутой безопасности и удобства использования.",
- "cta" : "Прокачать кошелёк",
- "linkText" : "Подробнее..."
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "Пора обновиться",
- "description" : "Ledger Nano S скоро перестанет обновляться. Перейдите на наши новые устройства со <0>скидкой {{discount}}%0>.",
- "cta" : "Прокачать кошелёк",
- "linkText" : "Подробнее..."
- },
- "optOut" : {
- "title" : "Пора обновиться",
- "description" : "Ledger Nano S скоро перестанет обновляться. Перейдите на наши новые устройства со <0>скидкой {{discount}}%0>.",
- "cta" : "Прокачать кошелёк",
- "linkText" : "Подробнее..."
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "Пора обновиться",
- "description" : "Перейдите на наши новые устройства со <0>скидкой {{discount}}%0> для ещё лучшей безопасности и удобства использования.",
- "cta" : "Прокачать кошелёк",
- "linkText" : "Подробнее..."
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "Апдейты скоро прекратятся. Обновитесь сейчас со скидкой {{discount}}%, чтобы и дальше наслаждаться использованием.",
- "cta" : "Прокачать кошелёк",
- "linkText" : "Подробнее..."
- },
- "optOut" : {
- "description" : "Апдейты скоро прекратятся. Обновитесь сейчас со скидкой {{discount}}%, чтобы и дальше наслаждаться использованием.",
- "cta" : "Прокачать кошелёк",
- "linkText" : "Подробнее..."
- }
- }
+ "opted_in" : {
+ "title" : "Ограниченная память — ограниченные впечатления",
+ "description" : "Перейдите с вашего Ledger Nano S на новое устройство – например, Ledger Flex. Вы получите бóльший объём памяти, актуальные улучшения безопасности, самые новые функции и <0>эксклюзивную скидку {{discount}}%>.",
+ "cta" : "Обновиться"
+ },
+ "opted_out" : {
+ "description" : "У Ledger Nano S ограниченный объём памяти, что не позволяет владельцам аппаратного кошелька использовать актуальные функции и изменения в блокчейне, а также наслаждаться улучшениями безопасности. Перейдите на новое устройство Ledger, и пользуйтесь им ещё долгие годы.",
+ "cta" : "Подробнее..."
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/th/app.json b/apps/ledger-live-desktop/static/i18n/th/app.json
index 02abbba8298f..d8595c67e069 100644
--- a/apps/ledger-live-desktop/static/i18n/th/app.json
+++ b/apps/ledger-live-desktop/static/i18n/th/app.json
@@ -179,7 +179,7 @@
"UNDELEGATE_RESOURCE" : "Undelegate แล้ว",
"WITHDRAW_EXPIRE_UNFREEZE" : "การถอน",
"LEGACYUNFREEZE" : "ไม่ได้ถูกระงับ",
- "REWARD" : "Reward ที่ขอรับแล้ว",
+ "REWARD" : "Reward ที่เคลมแล้ว",
"FEES" : "ค่าธรรมเนียม",
"OPT_IN" : "เลือกเข้าร่วม",
"OPT_OUT" : "เลือกไม่เข้าร่วม",
@@ -288,7 +288,7 @@
"menu" : "เมนู",
"stars" : "บัญชีที่ติดดาว",
"accounts" : "บัญชี",
- "manager" : "My Ledger",
+ "manager" : "Ledger ของฉัน",
"earn" : "Earn",
"exchange" : "ซื้อ / ขาย",
"swap" : "Swap",
@@ -299,7 +299,7 @@
"recover" : "[L] Recover"
},
"stars" : {
- "placeholder" : "ติดดาวที่บัญชีเพื่อแสดงให้เห็นตรงนี้",
+ "placeholder" : "ติดดาวบัญชีเพื่อให้แสดงที่นี่",
"tooltip" : "ติดดาวบัญชี"
},
"bridge" : {
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "Ledger Nano S™ ไม่สามารถใช้ได้กับ {{provider}}",
- "description" : "Ledger Nano S ไม่สามารถใช้ได้กับ {{provider}} คุณสามารถใช้ Ledger Nano S Plus, Ledger Nano X, Ledger Stax, หรือ Ledger Flex เพื่อสัมผัสประสบการณ์ Swap แบบ Cross-Chain บน {{provider}} ผ่าน Ledger Live",
+ "description" : "Ledger Nano S™ ไม่สามารถใช้ได้กับ {{provider}} คุณสามารถใช้ Ledger Nano S Plus™, Ledger Nano X™, Ledger Stax™ หรือ Ledger Flex™ เพื่อสัมผัสประสบการณ์ Swap แบบ Cross-Chain บน {{provider}} ผ่าน Ledger Live",
"cta" : "สำรวจอุปกรณ์ที่เข้ากันได้",
"changeProvider" : "Swap กับผู้ให้บริการรายอื่น"
},
@@ -792,7 +792,7 @@
"sending_tokens" : "กำลังส่งโทเคน",
"receiving_tokens" : "กำลังรับโทเคน",
"staking" : "กำลัง Stake",
- "claiming_staking_rewards" : "กำลังรับ Reward จากการ Stake"
+ "claiming_staking_rewards" : "กำลังเคลม Reward จากการ Stake"
},
"support" : "การสนับสนุน"
},
@@ -1310,7 +1310,7 @@
"contactSupportCTA" : "ติดต่อ Ledger Support",
"notFoundEntityError" : {
"title" : "เริ่ม Genuine Check อีกครั้ง",
- "description" : "คุณต้องปิดใช้งานการตั้งค่า \"ผู้ให้บริการ My Ledger ({{providerNumber}}})\" ก่อน หากต้องการปิดใช้งาน ให้เปิด “การตั้งค่า” บน Ledger Live แล้วเลือก “Experimental Features” แล้ว Toggle เพื่อปิด “ผู้ให้บริการ My Ledger”"
+ "description" : "คุณต้องปิดใช้งานการตั้งค่า \"ผู้ให้บริการ My Ledger ({{providerNumber}})\" ก่อน หากต้องการปิดใช้งาน ให้เปิด “การตั้งค่า” บน Ledger Live แล้วเลือก “Experimental Features” แล้ว Toggle เพื่อปิด “ผู้ให้บริการ My Ledger”"
},
"deviceNotGenuineError" : {
"title" : "{{productName}} นี้ไม่ใช่ของแท้",
@@ -1606,7 +1606,7 @@
"desc" : "เพิ่มบัญชีเพื่อจัดการสินทรัพย์คริปโตของคุณ คุณต้องติดตั้งแอปบนอุปกรณ์ของคุณเพื่อจัดการสินทรัพย์คริปโตของคุณ",
"buttons" : {
"addAccount" : "เพิ่มบัญชี",
- "installApp" : "ไปที่ My Ledger เพื่อติดตั้งแอป",
+ "installApp" : "ไปที่ Ledger ของฉันเพื่อติดตั้งแอป",
"help" : "ช่วยเหลือ"
}
}
@@ -1667,10 +1667,10 @@
"1M_label" : "1M",
"1Y_label" : "1Y",
"1h" : "1h",
- "24h" : "24h",
- "7d" : "7d",
+ "24h" : "24H",
+ "7d" : "7D",
"30d" : "30D",
- "1y" : "1y",
+ "1y" : "1Y",
"1H_selectorLabel" : "1 ชั่วโมงที่ผ่านมา",
"1D_selectorLabel" : "24 ชั่วโมงที่ผ่านมา",
"1W_selectorLabel" : "สัปดาห์ที่ผ่านมา",
@@ -1704,7 +1704,7 @@
"tokenAddress" : "Address โทเคน",
"tokenId" : "ID โทเคน",
"quantity" : "ปริมาณ",
- "floorPrice" : "ราคาพื้น"
+ "floorPrice" : "ราคาฟลอร์"
}
},
"collections" : {
@@ -1872,14 +1872,15 @@
"memo" : "Memo",
"assetId" : "ID สินทรัพย์",
"rewards" : "Reward ที่ได้รับ",
- "autoClaimedRewards" : "Reward ที่ได้รับอัตโนมัติ",
+ "autoClaimedRewards" : "Reward ที่เคลมโดยอัตโนมัติ",
"bondedAmount" : "จำนวนที่ผูกมัด",
"unbondedAmount" : "จำนวนที่ไม่ได้ผูกมัด",
"withdrawUnbondedAmount" : "จำนวนที่ถอน",
"palletMethod" : "วิธีการ",
"transferAmount" : "จำนวนที่โอน",
"validatorsCount" : "({{number}}) ผู้ตรวจสอบ ",
- "version" : "เวอร์ชัน"
+ "version" : "เวอร์ชัน",
+ "accountCreationFee" : "Account Creation Fee"
}
},
"operationList" : {
@@ -1903,7 +1904,7 @@
"openManager" : "เปิด My Ledger",
"openOnboarding" : "ตั้งค่าอุปกรณ์",
"outdated" : "เวอร์ชันแอปล้าสมัย",
- "outdatedDesc" : "มีการอัปเดตที่สำคัญสำหรับแอปพลิเคชัน {{appName}} บนอุปกรณ์ของคุณ โปรดไปที่ My Ledger เพื่ออัปเดต",
+ "outdatedDesc" : "มีการอัปเดตที่สำคัญสำหรับแอปพลิเคชัน {{appName}} บนอุปกรณ์ของคุณ โปรดไปที่ Ledger ของฉันเพื่ออัปเดต",
"installApp" : "การติดตั้งแอป {{appName}}",
"installAppDescription" : "โปรดรอสักครู่จนกว่าการติดตั้งจะเสร็จสิ้น",
"listApps" : "กำลังตรวจสอบการขึ้นต่อกันของแอป",
@@ -1951,7 +1952,7 @@
"disconnected" : {
"title" : "ดูเหมือนว่าแอปจะเปิดอยู่บนอุปกรณ์ของคุณ",
"subtitle" : "การเปิด My Ledger อีกครั้งจะเป็นการปิดแอปบนอุปกรณ์ของคุณ",
- "ctaReopen" : "เปิด My Ledger อีกครั้ง",
+ "ctaReopen" : "เปิด Ledger ของฉันอีกครั้ง",
"ctaPortfolio" : "กลับไปยังพอร์ตโฟลิโอ"
},
"deviceStorage" : {
@@ -2011,7 +2012,7 @@
"uninstall" : "ถอนการติดตั้ง",
"notEnoughSpace" : "พื้นที่เก็บข้อมูลไม่เพียงพอ",
"supported" : "รองรับ Ledger Live",
- "not_supported" : "ต้องมี Wallet ของบุคคลที่สาม",
+ "not_supported" : "ต้องมีวอลเล็ตของบุคคลที่สาม",
"addAccount" : "เพิ่มบัญชี",
"addAccountTooltip" : "เพิ่มบัญชี {{appName}}",
"addAccountWarn" : "โปรดรอให้การประมวลผลเสร็จสิ้น",
@@ -2053,7 +2054,7 @@
"dontHaveSeed" : "ไม่มี Recovery Phrase? ",
"followTheGuide" : "ทำตามคำแนะนำการอัปเดตทีละขั้นตอนของเรา",
"removeApps" : "ถอนการติดตั้งทุกแอปก่อนการอัปเดต",
- "update" : "การอัปเดต {{productName} OS",
+ "update" : "การอัปเดต {{productName}} OS",
"updateBtn" : "อัปเดตระบบปฏิบัติการ",
"installUpdate" : "ติดตั้งการอัปเดต",
"banner" : {
@@ -2130,14 +2131,14 @@
"boot" : "กดค้างที่ปุ่มด้านข้างจนกว่า {{option}} จะปรากฏ",
"recoveryMode" : "แตะโหมด {{mode}} รอจนกว่าแดชบอร์ดจะปรากฏ",
"third" : "3. ถอนการติดตั้งแอปทั้งหมด",
- "openLive" : "เปิด My Ledger ใน Ledger Live",
+ "openLive" : "เปิด Ledger ของฉันใน Ledger Live",
"uninstall" : "คลิกที่ไอคอนถังขยะสีเทาสำหรับแอปทั้งหมดที่ติดตั้งอยู่ในปัจจุบันใน {{deviceName}} ทำให้มีพื้นที่สำหรับตัวติดตั้งเฟิร์มแวร์",
"disclaimer" : "หมายเหตุ: เงินทุนของคุณจะไม่ได้รับผลกระทบจากการดำเนินการนี้ โดย Private Key ที่ใช้เข้าถึงสินทรัพย์คริปโตของคุณในบล็อกเชนจะยังคงปลอดภัยบน Recovery Sheet"
}
}
},
"claimReward" : {
- "title" : "ขอรับ Reward",
+ "title" : "เคลม Reward",
"steps" : {
"rewards" : {
"title" : "Reward",
@@ -2150,7 +2151,7 @@
"confirmation" : {
"title" : "การยืนยัน",
"success" : {
- "title" : "รับ Reward แล้ว",
+ "title" : "เคลม Reward แล้ว",
"text" : "Reward ของคุณได้รับการเพิ่มเข้าไปในยอดคงเหลือในบัญชีที่คุณใช้ได้แล้ว",
"cta" : "ดูรายละเอียด",
"done" : "เสร็จสิ้น"
@@ -2460,7 +2461,7 @@
"chooseName" : "เลือกชื่อ",
"placeholder" : "Tony's Stax",
"remainingCharacters" : "เหลืออีก {{ remainingCharacters }} ตัวอักษร",
- "renamed" : "{{ productName }} เปลี่ยนชื่อเป็น \n“{{ name }}}” แล้ว "
+ "renamed" : "{{ productName }} เปลี่ยนชื่อเป็น \n“{{ name }}” แล้ว "
},
"removeCustomLockscreen" : {
"title" : "นำภาพ Lock Screen Picture ออก",
@@ -2548,7 +2549,7 @@
"delegation" : "รับ Reward"
},
"commission" : "คอมมิชชัน",
- "claimRewards" : "ขอรับ Reward",
+ "claimRewards" : "เคลม Reward",
"header" : "Delegation",
"noRewards" : "ไม่สามารถใช้ Reward ได้",
"delegate" : "Delegate",
@@ -2556,7 +2557,7 @@
"redelegateDisabledTooltip" : "คุณสามารถมอบหมายใหม่ได้ในอีก <0>{{days}}0> วัน",
"redelegateMaxDisabledTooltip" : "คุณไม่สามารถ Redelegate ได้มากกว่า <0>70> ผู้ตรวจสอบต่อครั้ง",
"undelegateDisabledTooltip" : "คุณไม่สามารถ Redelegate ได้มากกว่า <0>70> ผู้ตรวจสอบต่อครั้ง",
- "reward" : "ขอรับ Reward",
+ "reward" : "เคลม Reward",
"currentDelegation" : "Delegate แล้ว: <0>{{amount}}0>",
"apr" : "อัตราร้อยละต่อปี",
"totalStake" : "จำนวน Stake ทั้งหมด",
@@ -2604,13 +2605,13 @@
},
"claimRewards" : {
"flow" : {
- "title" : "ขอรับ Reward",
+ "title" : "เคลม Reward",
"steps" : {
"claimRewards" : {
"title" : "Reward",
"compound" : "Compound Reward",
- "claim" : "ขอรับ Reward",
- "compoundOrClaim" : "ทำการทบต้น Reward หรือรับ Reward เลย",
+ "claim" : "เคลม Reward",
+ "compoundOrClaim" : "จะทบต้น Reward หรือเคลม Reward เลย",
"compoundDescription" : "Reward จะถูกเพิ่มเข้าไปในจำนวนที่ Delegate",
"claimDescription" : "Reward จะถูกเพิ่มเข้าไปในยอดคงเหลือที่ใช้ได้",
"compoundInfo" : "คุณได้รับ <0>{{amount}}0> แล้ว การคลิกดำเนินการต่อจะถือว่ากำลังมีการขอรับทันที และจะมีการ Delegate โดยอัตโนมัติให้กับผู้ให้บริการ Staking เดียวกัน",
@@ -2624,7 +2625,7 @@
"title" : "การยืนยัน",
"label" : "การยืนยัน",
"success" : {
- "title" : "ขอรับ Reward เรียบร้อยแล้ว",
+ "title" : "เคลม Reward เรียบร้อยแล้ว",
"titleCompound" : "ทำการทบต้น Reward เรียบร้อยแล้ว",
"text" : "มีการเพิ่ม Reward เข้าไปในยอดคงเหลือที่คุณใช้ได้แล้ว",
"textCompound" : "ธุรกรรม Reward ที่ทบต้นจำนวน <0>{{amount}}0> EGLD ไปยัง <0>{{validator}}0> ได้รับการดำเนินการเรียบร้อยแล้ว",
@@ -2651,7 +2652,7 @@
"amount" : {
"title" : "จำนวน",
"subtitle" : "กระบวนการ Undelegate ใช้เวลา <0>10 วัน0> จึงจะแล้วเสร็จ",
- "warning" : "จะมีการขอรับ Reward โดยอัตโนมัติ การ Undelegate เป็นกระบวนการ 2 ขั้นตอน: การร้องขอการ Undelegate ตามด้วย<0>ช่วงเวลาการยกเลิกการผูกมัด 10 วัน0> ซึ่งหลังจากนั้น คุณสามารถดำเนินการถอนให้เสร็จสิ้น และจำนวนที่ Undelegate จะได้รับการโอนไปยังยอดคงเหลือที่ใช้ได้",
+ "warning" : "จะมีการเคลม Reward โดยอัตโนมัติ การ Undelegate เป็นกระบวนการ 2 ขั้นตอน: การร้องขอการ Undelegate ตามด้วย<0>ช่วงเวลาการยกเลิกการผูกมัด 10 วัน0> ซึ่งหลังจากนั้น คุณสามารถดำเนินการถอนให้เสร็จสิ้น และจำนวนที่ Undelegate จะได้รับการโอนไปยังยอดคงเหลือที่ใช้ได้",
"fields" : {
"validator" : "ผู้ให้บริการ Staking",
"amount" : "จำนวนที่จะ Undelegate"
@@ -2786,9 +2787,9 @@
"warnEarnRewards" : "คุณต้องการอย่างน้อย {{amount}} เพื่อเริ่มรับ Reward",
"warnDisableStaking" : "ไม่สามารถใช้ได้",
"warnDisableStakingMessage" : "ฟีเจอร์ Staking สำหรับ Tron ไม่สามารถใช้งานได้ในตอนนี้",
- "claimRewards" : "ขอรับ Reward",
+ "claimRewards" : "เคลม Reward",
"nextRewardsDate" : "สามารถขอรับ Reward ได้ในวันที่ {{date}}",
- "claimAvailableRewards" : "ขอรับ {{amount}}",
+ "claimAvailableRewards" : "เคลม {{amount}}",
"header" : "การโหวต",
"percentageTP" : "% การลงคะแนนไปแล้วของการโหวต",
"noRewards" : "ไม่มี Reward",
@@ -3152,7 +3153,7 @@
},
"commission" : "คอมมิชชัน",
"totalStake" : "จำนวน Stake ทั้งหมด",
- "claimRewards" : "ขอรับ Reward",
+ "claimRewards" : "เคลม Reward",
"header" : "การ Delegation",
"noRewards" : "ไม่มี Reward",
"delegate" : "เพิ่ม",
@@ -3161,7 +3162,7 @@
"redelegateDisabledTooltip" : "คุณสามารถ Redelegate ได้ในอีก <0>{{days}}0> วัน",
"redelegateMaxDisabledTooltip" : "คุณไม่สามารถ Redelegate ได้มากกว่า <0>70> ผู้ตรวจสอบต่อครั้ง",
"undelegateDisabledTooltip" : "คุณไม่สามารถ Redelegate ได้มากกว่า <0>70> ผู้ตรวจสอบต่อครั้ง",
- "reward" : "ขอรับ Reward",
+ "reward" : "เคลม Reward",
"currentDelegation" : "Delegate แล้ว: <0>{{amount}}0>",
"estYield" : "ผลตอบแทนโดยประมาณ",
"activeTooltip" : "จำนวนที่ Delegate จะส่งผลต่อจำนวน Reward ที่ได้",
@@ -3200,7 +3201,7 @@
},
"claimRewards" : {
"flow" : {
- "title" : "ขอรับ Reward",
+ "title" : "เคลม Reward",
"steps" : {
"claimRewards" : {
"title" : "Reward",
@@ -3331,10 +3332,10 @@
"claimRewards" : {
"header" : "Reward",
"tooltip" : "Reward ของ Algorand จะได้รับการกระจายเป็นประจำ และสามารถรับได้โดยอัตโนมัติเมื่อคุณทำธุรกรรม",
- "cta" : "ขอรับ Reward",
+ "cta" : "เคลม Reward",
"rewardsDisabledTooltip" : "คุณไม่มี Reward ใด ๆ สามารถขอรับ Reward ของ Algorand ได้โดยอัตโนมัติเมื่อคุณทำธุรกรรม รับ ALGO เพื่อเริ่มรับ Reward",
"flow" : {
- "title" : "ขอรับ Reward",
+ "title" : "เคลม Reward",
"steps" : {
"starter" : {
"description" : "รับ Reward ของ Algorand ได้เพียงแค่ถือ Algorand เพื่อการควบคุมสินทรัพย์ของคุณ",
@@ -3359,7 +3360,7 @@
"confirmation" : {
"title" : "การยืนยัน",
"success" : {
- "title" : "ขอรับ Reward เรียบร้อยแล้ว!",
+ "title" : "เคลม Reward เรียบร้อยแล้ว!",
"text" : "Reward ของคุณได้รับการเพิ่มเข้าไปในยอดคงเหลือที่คุณใช้ได้แล้ว",
"cta" : "ดูรายละเอียด"
},
@@ -4494,7 +4495,7 @@
"description" : "ลิมิตช่องว่างที่กำหนดเองสำหรับทุกบัญชี การเพิ่มค่านี้ให้สูงกว่าค่าเริ่มต้น (20) จะสแกน Address สาธารณะที่ไม่ได้ใช้งานเพิ่มเติมเพื่อค้นหาเหรียญ สำหรับผู้ใช้ที่เชี่ยวชาญเท่านั้น สิ่งนี้อาจทำให้มีปัญหาเข้ากันไม่ได้ในการกู้คืนบัญชีของคุณ"
},
"forceProvider" : {
- "title" : "ผู้ให้บริการ My Ledger",
+ "title" : "ผู้ให้บริการ Ledger ของฉัน",
"description" : "การเปลี่ยนผู้ให้บริการแอปใน My Ledger อาจทำให้ไม่สามารถติดตั้งหรือถอนการติดตั้งแอปบนอุปกรณ์ Ledger ของคุณได้"
},
"testAnimations" : {
@@ -5330,7 +5331,7 @@
"anotherComputer" : {
"title" : "ลองใช้คอมพิวเตอร์เครื่องอื่น",
"bullets" : {
- "0" : "ไปที่ <0>{{link}}}0> บนคอมพิวเตอร์เครื่องอื่นเพื่อดาวน์โหลดและติดตั้ง Ledger Live",
+ "0" : "ไปที่ <0>{{link}}0> บนคอมพิวเตอร์เครื่องอื่นเพื่อดาวน์โหลดและติดตั้ง Ledger Live",
"1" : "เชื่อมต่อและปลดล็อกอุปกรณ์ของคุณเพื่อดูว่าตรวจพบหรือไม่"
}
}
@@ -5515,6 +5516,11 @@
"memo" : "Tag / Memo",
"memoPlaceholder" : "ไม่บังคับ",
"requiredMemoPlaceholder" : "จำเป็น"
+ },
+ "mina" : {
+ "memoPlaceholder" : "ไม่บังคับ",
+ "memo" : "Memo",
+ "memoWarningText" : "Memo Value ต้องเป็นสตริงที่สั้นกว่าหรือเท่ากับ 32 อักขระ"
}
},
"errors" : {
@@ -5780,7 +5786,7 @@
"description" : "การออกจาก My Ledger จะยุติการอัปเดตแอปที่กำลังดำเนินการ",
"stay" : "อัปเดตให้เสร็จสิ้น"
},
- "quit" : "ปิด My Ledger"
+ "quit" : "ปิด Ledger ของฉัน"
},
"ManagerUninstallBTCDep" : {
"title" : "ขออภัย ต้องมีแอปนี้",
@@ -6118,7 +6124,7 @@
"description" : "เปิดแอป '{{managerAppName}}' บนอุปกรณ์ของคุณ"
},
"DeviceNameInvalid" : {
- "title" : "โปรดเลือกชื่ออุปกรณ์ที่ไม่มี '{{invalidCharacters}}}'"
+ "title" : "โปรดเลือกชื่ออุปกรณ์ที่ไม่มี '{{invalidCharacters}}'"
},
"LedgerAPIErrorWithMessage" : {
"title" : "{{message}}",
@@ -6545,6 +6551,15 @@
"swap" : "Swap",
"deposit" : "ฝาก"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "Memo ไม่สามารถยาวเกิน 32 ตัวอักษร"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "This transaction will incur an account creation fee of {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "Minimum required amount for this transaction is {{amount}}"
}
},
"cryptoOrg" : {
diff --git a/apps/ledger-live-desktop/static/i18n/tr/app.json b/apps/ledger-live-desktop/static/i18n/tr/app.json
index fe91422de466..44658b411bc4 100644
--- a/apps/ledger-live-desktop/static/i18n/tr/app.json
+++ b/apps/ledger-live-desktop/static/i18n/tr/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "Ledger Nano S™, {{provider}} ile uyumlu değildir",
- "description" : "Ledger Nano S, {{provider}} ile uyumlu değildir. Ledger Live üzerinden {{provider}} aracılığıyla zincirler arası takas işlemleri yapmak için Ledger Nano S Plus, Ledger Nano X, Ledger Stax veya Ledger Flex cihazlarını kullanabilirsiniz",
+ "description" : "Ledger Nano S™, {{provider}} ile uyumlu değildir. Ledger Live üzerinden {{provider}} aracılığıyla zincirler arası takas işlemleri yapmak için Ledger Nano S Plus™, Ledger Nano X™, Ledger Stax™ veya Ledger Flex™ cihazlarını kullanabilirsiniz",
"cta" : "Uyumlu cihazları keşfedin",
"changeProvider" : "Başka bir sağlayıcıyla takas edin"
},
@@ -449,8 +449,8 @@
"ton_description" : "Ton takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi diğer herhangi bir uyumlu Ledger cihazını kullanın.",
"spl_tokens_title" : "Ledger Nano S™, Solana token takasını desteklemez",
"spl_tokens_description" : "Solana token'larını takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi diğer herhangi bir uyumlu Ledger cihazını kullanın.",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "Ledger Nano S™, Sui token takasını desteklemez",
+ "sui_tokens_description" : "Sui token'larını takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi diğer herhangi bir uyumlu Ledger cihazını kullanın.",
"near_title" : "Ledger Nano S™, Near takasını desteklemez",
"near_description" : "Near takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazı kullanın.",
"ada_title" : "Ledger Nano S™, Cardano takasını desteklemez",
@@ -459,12 +459,12 @@
"apt_description" : "Aptos takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazı kullanın.",
"cosmos_title" : "Ledger Nano S™, Cosmos takasını desteklemez",
"cosmos_description" : "Cosmos takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazı kullanın.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™, Osmosis takasını desteklemez",
+ "osmo_description" : "Osmosis takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazını kullanın.",
+ "dydx_title" : "Ledger Nano S™, dYdX takasını desteklemez",
+ "dydx_description" : "dYdX takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazını kullanın.",
+ "sui_title" : "Ledger Nano S™, Sui takasını desteklemez",
+ "sui_description" : "Sui takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi diğer herhangi bir uyumlu Ledger cihazını kullanın."
},
"providers" : {
"title" : "Kripto takası işlemleri için bir sağlayıcı seçin",
@@ -776,6 +776,10 @@
"description3Link" : "Bu entegrasyon, <1><0>{{team}}0>1> tarafından Ledger ile iş birliği yapılarak gerçekleştirilmiştir"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}}, şuraya taşınıyor: {{to}}. Daha fazla bilgi edinmek için bu <0>bağlantıyı0> takip edin veya yardıma ihtiyacınız varsa destek ekibiyle iletişime geçin.",
+ "contactSupport" : "Destek al"
+ },
"featureUnavailable" : {
"title" : "Şu özellik an itibarıyla kullanılamıyor: {{feature}}. Daha fazla bilgi için lütfen {{support}} bakın.",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "Yöntem",
"transferAmount" : "Transfer Tutarı",
"validatorsCount" : "Doğrulayıcılar ({{number}})",
- "version" : "Sürüm"
+ "version" : "Sürüm",
+ "accountCreationFee" : "Hesap Oluşturma Ücreti"
}
},
"operationList" : {
@@ -2049,7 +2054,7 @@
"dontHaveSeed" : "Kurtarma ifadeniz yok mu? ",
"followTheGuide" : "Adım adım güncelleme kılavuzumuzu uygulayın",
"removeApps" : "Güncellemeden önce tüm uygulamaları kaldırın",
- "update" : "{{productName} işletim sistemi güncellemesi",
+ "update" : "{{productName}} İşletim Sistemi Güncellemesi",
"updateBtn" : "Donanım yazılımını güncelle",
"installUpdate" : "Güncellemeyi yükle",
"banner" : {
@@ -5511,6 +5516,11 @@
"memo" : "Etiket / Memo",
"memoPlaceholder" : "Opsiyonel",
"requiredMemoPlaceholder" : "Gerekli"
+ },
+ "mina" : {
+ "memoPlaceholder" : "Tercihe bağlı",
+ "memo" : "Memo",
+ "memoWarningText" : "Memo değeri, en fazla 32 karakterlik bir dize olabilir"
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "takas edin",
"deposit" : "yatırın"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "Memo metni 32 karakterden uzun olamaz"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Bu işlem için {{fee}} tutarında bir hesap oluşturma ücreti alınacaktır"
+ },
+ "AmountTooSmall" : {
+ "title" : "Bu işlem için gerekli minimum tutar: {{amount}}"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "Model yükseltme zamanı",
- "description" : "Yüksek güvenlik ve sorunsuz bir deneyim için en yeni cihazlarımıza <0>%{{discount}} indirimle0> model yükseltin.",
- "cta" : "Cüzdanımın modelini yükselt",
- "linkText" : "Daha fazla bilgi"
- },
- "optOut" : {
- "title" : "Model yükseltme zamanı",
- "description" : "Yüksek güvenlik ve sorunsuz bir deneyim için en yeni cihazlarımıza <0>%{{discount}} indirimle0> model yükseltin.",
- "cta" : "Cüzdanımın modelini yükselt",
- "linkText" : "Daha fazla bilgi"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "Model yükseltme zamanı",
- "description" : "Ledger Nano S model yükseltme teklifleri yakında sona eriyor. En yeni cihazlarımıza <0>%{{discount}} indirimle0> model yükseltin.",
- "cta" : "Cüzdanımın modelini yükselt",
- "linkText" : "Daha fazla bilgi"
- },
- "optOut" : {
- "title" : "Model yükseltme zamanı",
- "description" : "Ledger Nano S model yükseltme teklifleri yakında sona eriyor. En yeni cihazlarımıza <0>%{{discount}} indirimle0> model yükseltin.",
- "cta" : "Cüzdanımın modelini yükselt",
- "linkText" : "Daha fazla bilgi"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "Model yükseltme zamanı",
- "description" : "Yüksek güvenlik ve sorunsuz bir deneyim için en yeni cihazlarımıza <0>%{{discount}} indirimle0> model yükseltin.",
- "cta" : "Cüzdan modelini yükselt",
- "linkText" : "Daha fazla bilgi"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "Cihaz güncellemeleri yakında sona eriyor. Sorunsuz bir deneyim için %{{discount}} indirimle hemen model yükseltin.",
- "cta" : "Cüzdanımın modelini yükselt",
- "linkText" : "Daha fazla bilgi"
- },
- "optOut" : {
- "description" : "Cihaz güncellemeleri yakında sona eriyor. Sorunsuz bir deneyim için %{{discount}} indirimle hemen model yükseltin.",
- "cta" : "Cüzdanımın modelini yükselt",
- "linkText" : "Daha fazla bilgi"
- }
- }
+ "opted_in" : {
+ "title" : "Sınırlı bellek, sınırlı deneyim",
+ "description" : "Daha fazla bellek, en son güvenlik güncellemeleri, yeni özellikler ve <0>%{{discount}} oranında özel bir indirim> için Ledger Nano S cihazınızın modelini Ledger Flex gibi daha yeni bir Ledger modeline yükseltin.",
+ "cta" : "Ledger modelimi yükselt"
+ },
+ "opted_out" : {
+ "description" : "Ledger Nano S cihazınızdaki sınırlı bellek en yeni özelliklere, blok zinciri değişikliklerine ve güvenlik güncellemelerine erişiminizi kısıtlar. Uzun vadeli kullanım için daha yeni bir Ledger cihazına model yükseltin.",
+ "cta" : "Daha fazla bilgi"
}
}
}
diff --git a/apps/ledger-live-desktop/static/i18n/zh/app.json b/apps/ledger-live-desktop/static/i18n/zh/app.json
index b64851078934..43cb48ab316b 100644
--- a/apps/ledger-live-desktop/static/i18n/zh/app.json
+++ b/apps/ledger-live-desktop/static/i18n/zh/app.json
@@ -440,7 +440,7 @@
},
"wrongDevice" : {
"title" : "Ledger Nano S™ 与 {{provider}} 不兼容",
- "description" : "Ledger Nano S 与 {{provider}} 不兼容。您可以使用 Ledger Nano S Plus、Ledger Nano X、Ledger Stax 或 Ledger Flex 通过 Ledger Live 体验 {{provider}} 的跨链互换",
+ "description" : "Ledger Nano S™ 与 {{provider}} 不兼容。您可以使用 Ledger Nano S Plus™、Ledger Nano X™、Ledger Stax™ 或 Ledger Flex™ 通过 Ledger Live 体验 {{provider}} 的跨链互换",
"cta" : "浏览兼容设备",
"changeProvider" : "使用其他提供商进行互换"
},
@@ -449,8 +449,8 @@
"ton_description" : "要互换 TON,请使用任何其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
"spl_tokens_title" : "Ledger Nano S™ 不支持互换 Solana 代币",
"spl_tokens_description" : "要互换 Solana 代币,请使用任何其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
- "sui_tokens_title" : "Ledger Nano S™ does not support swapping Sui tokens",
- "sui_tokens_description" : "To swap Sui tokens, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
+ "sui_tokens_title" : "Ledger Nano S™ 不支持互换 Sui 代币",
+ "sui_tokens_description" : "要互换 Sui 代币,请使用任何其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
"near_title" : "Ledger Nano S™ 不支持互换 Near",
"near_description" : "要互换 Near,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
"ada_title" : "Ledger Nano S™ 不支持互换 Cardano",
@@ -459,12 +459,12 @@
"apt_description" : "要互换 Aptos,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
"cosmos_title" : "Ledger Nano S™ 不支持互换 Cosmos",
"cosmos_description" : "要互换 Cosmos,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™ 不支持互换 Osmosis",
+ "osmo_description" : "要互换 Osmosis,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
+ "dydx_title" : "Ledger Nano S™ 不支持互换 dYdX",
+ "dydx_description" : "要互换 dYdX,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
+ "sui_title" : "Ledger Nano S™ 不支持互换 Sui",
+ "sui_description" : "要互换 Sui,请使用任何其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。"
},
"providers" : {
"title" : "选择一个供应方来互换加密货币",
@@ -776,6 +776,10 @@
"description3Link" : "此集成由 <1><0>{{team}}0>1> 与 Ledger 协作实施"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} 正在迁移至 {{to}}。请点击此<0>链接0>了解详情,如需帮助,请联系客服。",
+ "contactSupport" : "联系客服"
+ },
"featureUnavailable" : {
"title" : "以下功能暂不可用:{{feature}}。如需了解更多信息,请联系 {{support}}",
"feature" : {
@@ -1875,7 +1879,8 @@
"palletMethod" : "方法",
"transferAmount" : "转移数额",
"validatorsCount" : "验证者 ({{number}})",
- "version" : "版本"
+ "version" : "版本",
+ "accountCreationFee" : "账户创建费"
}
},
"operationList" : {
@@ -5511,6 +5516,11 @@
"memo" : "标签/备忘标签",
"memoPlaceholder" : "可选",
"requiredMemoPlaceholder" : "必填"
+ },
+ "mina" : {
+ "memoPlaceholder" : "可选",
+ "memo" : "备忘标签",
+ "memoWarningText" : "备忘标签的值可以是小于或等于 32 个字符的字符串"
}
},
"errors" : {
@@ -6541,6 +6551,15 @@
"swap" : "互换",
"deposit" : "存款"
}
+ },
+ "InvalidMemoMina" : {
+ "title" : "备忘标签文本不可超过 32 个字符"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "此交易将产生 {{fee}} 的账户创建费"
+ },
+ "AmountTooSmall" : {
+ "title" : "此交易的最低数额要求为 {{amount}}"
}
},
"cryptoOrg" : {
@@ -6991,55 +7010,14 @@
}
},
"lnsUpsell" : {
- "banner" : {
- "manager" : {
- "optIn" : {
- "title" : "现在就是升级的好时机",
- "description" : "升级到我们的最新设备,立享 <0>{{discount}}% 折扣优惠0>,加强安全保护,享受顺畅体验。",
- "cta" : "升级我的钱包",
- "linkText" : "了解更多"
- },
- "optOut" : {
- "title" : "现在就是升级的好时机",
- "description" : "升级到我们的最新设备,立享 <0>{{discount}}% 折扣优惠0>,加强安全保护,享受顺畅体验。",
- "cta" : "升级我的钱包",
- "linkText" : "了解更多"
- }
- },
- "accounts" : {
- "optIn" : {
- "title" : "现在就是升级的好时机",
- "description" : "Ledger Nano S 更新活动即将结束。升级到我们的最新设备,立享 <0>{{discount}}% 折扣优惠0>。",
- "cta" : "升级我的钱包",
- "linkText" : "了解更多"
- },
- "optOut" : {
- "title" : "现在就是升级的好时机",
- "description" : "Ledger Nano S 更新活动即将结束。升级到我们的最新设备,立享 <0>{{discount}}% 折扣优惠0>。",
- "cta" : "升级我的钱包",
- "linkText" : "了解更多"
- }
- },
- "portfolio" : {
- "optOut" : {
- "title" : "现在就是升级的好时机",
- "description" : "升级到我们的最新设备,立享 <0>{{discount}}% 折扣优惠0>,加强安全保护,享受顺畅体验。",
- "cta" : "升级我的钱包",
- "linkText" : "了解更多"
- }
- },
- "notifications" : {
- "optIn" : {
- "description" : "更新活动即将结束。立即升级,享受顺畅体验,更有 {{discount}}% 折扣优惠。",
- "cta" : "升级我的钱包",
- "linkText" : "了解更多"
- },
- "optOut" : {
- "description" : "更新活动即将结束。立即升级,享受顺畅体验,更有 {{discount}}% 折扣优惠。",
- "cta" : "升级我的钱包",
- "linkText" : "了解更多"
- }
- }
+ "opted_in" : {
+ "title" : "内存有限,体验受限",
+ "description" : "将您的 Ledger Nano S 升级到 Ledger Flex 等新款 Ledger 设备,即可享受<0>省 {{discount}}% 专属折扣>,解锁更多内存、全新功能和最新增强安全保护。",
+ "cta" : "升级 Ledger 设备"
+ },
+ "opted_out" : {
+ "description" : "Ledger Nano S 内存有限,影响您访问最新功能、区块链变更和增强安全保护。为保证长期使用体验,请升级到新款 Ledger 设备。",
+ "cta" : "了解更多"
}
}
}
diff --git a/apps/ledger-live-mobile/src/components/RootNavigator/types/SendFundsNavigator.ts b/apps/ledger-live-mobile/src/components/RootNavigator/types/SendFundsNavigator.ts
index cad605f2a3c0..25962d5c7e05 100644
--- a/apps/ledger-live-mobile/src/components/RootNavigator/types/SendFundsNavigator.ts
+++ b/apps/ledger-live-mobile/src/components/RootNavigator/types/SendFundsNavigator.ts
@@ -29,6 +29,7 @@ import {
} from "@ledgerhq/live-common/families/solana/types";
import type { Transaction as RippleTransaction } from "@ledgerhq/live-common/families/xrp/types";
import type { Transaction as ICPTransaction } from "@ledgerhq/live-common/families/internet_computer/types";
+import type { Transaction as MinaTransaction } from "@ledgerhq/live-common/families/mina/types";
import type { Transaction as StellarTransaction } from "@ledgerhq/live-common/families/stellar/types";
import type { Transaction as StacksTransaction } from "@ledgerhq/live-common/families/stacks/types";
import type { Transaction as CasperTransaction } from "@ledgerhq/live-common/families/casper/types";
@@ -307,6 +308,13 @@ export type SendFundsNavigatorStackParamList = {
transaction: ICPTransaction;
currentNavigation: ScreenName.SignTransactionSummary | ScreenName.SignTransactionSummary;
};
+ [ScreenName.MinaEditMemo]: {
+ accountId: string;
+ account: Account;
+ parentId?: string;
+ transaction: MinaTransaction;
+ currentNavigation: ScreenName.SignTransactionSummary | ScreenName.SignTransactionSummary;
+ };
[ScreenName.StacksEditMemo]: {
accountId: string;
parentId?: string;
diff --git a/apps/ledger-live-mobile/src/components/RootNavigator/types/SignTransactionNavigator.ts b/apps/ledger-live-mobile/src/components/RootNavigator/types/SignTransactionNavigator.ts
index 9dd7e2e9e4a0..5a6c7c1de18b 100644
--- a/apps/ledger-live-mobile/src/components/RootNavigator/types/SignTransactionNavigator.ts
+++ b/apps/ledger-live-mobile/src/components/RootNavigator/types/SignTransactionNavigator.ts
@@ -23,6 +23,7 @@ import {
} from "@ledgerhq/live-common/families/solana/types";
import { Transaction as HederaTransaction } from "@ledgerhq/live-common/families/hedera/types";
import type { Transaction as ICPTransaction } from "@ledgerhq/live-common/families/internet_computer/types";
+import type { Transaction as MinaTransaction } from "@ledgerhq/live-common/families/mina/types";
import type { Transaction as RippleTransaction } from "@ledgerhq/live-common/families/xrp/types";
import type { Transaction as StellarTransaction } from "@ledgerhq/live-common/families/stellar/types";
import type { Transaction as StacksTransaction } from "@ledgerhq/live-common/families/stacks/types";
@@ -278,6 +279,22 @@ export type SignTransactionNavigatorParamList = {
| ScreenName.SendSelectDevice
| ScreenName.SwapForm;
};
+ [ScreenName.MinaEditMemo]: {
+ accountId: string;
+ account: Account;
+ parentId?: string;
+ transaction: MinaTransaction;
+ currentNavigation:
+ | ScreenName.SignTransactionSummary
+ | ScreenName.SignTransactionSummary
+ | ScreenName.SendSummary
+ | ScreenName.SwapForm;
+ nextNavigation:
+ | ScreenName.SignTransactionSelectDevice
+ | ScreenName.SignTransactionSelectDevice
+ | ScreenName.SendSelectDevice
+ | ScreenName.SwapForm;
+ };
[ScreenName.CasperEditTransferId]: {
accountId: string;
account: Account;
diff --git a/apps/ledger-live-mobile/src/components/RootNavigator/types/SwapNavigator.ts b/apps/ledger-live-mobile/src/components/RootNavigator/types/SwapNavigator.ts
index 6b3677681e89..89562d451352 100644
--- a/apps/ledger-live-mobile/src/components/RootNavigator/types/SwapNavigator.ts
+++ b/apps/ledger-live-mobile/src/components/RootNavigator/types/SwapNavigator.ts
@@ -27,6 +27,7 @@ import {
SolanaAccount,
Transaction as SolanaTransaction,
} from "@ledgerhq/live-common/families/solana/types";
+import type { Transaction as MinaTransaction } from "@ledgerhq/live-common/families/mina/types";
import type { Transaction as StacksTransaction } from "@ledgerhq/live-common/families/stacks/types";
import type { Transaction as StellarTransaction } from "@ledgerhq/live-common/families/stellar/types";
import type { Transaction as TonTransaction } from "@ledgerhq/live-common/families/ton/types";
@@ -270,6 +271,13 @@ export type SwapNavigatorParamList = {
transaction: ICPTransaction;
currentNavigation: ScreenName.SignTransactionSummary | ScreenName.SignTransactionSummary;
};
+ [ScreenName.MinaEditMemo]: {
+ accountId: string;
+ account: Account;
+ parentId?: string;
+ transaction: MinaTransaction;
+ currentNavigation: ScreenName.SignTransactionSummary | ScreenName.SignTransactionSummary;
+ };
[ScreenName.StacksEditMemo]: {
accountId: string;
diff --git a/apps/ledger-live-mobile/src/const/navigation.ts b/apps/ledger-live-mobile/src/const/navigation.ts
index cfe9d910ef66..86e885f3dbce 100644
--- a/apps/ledger-live-mobile/src/const/navigation.ts
+++ b/apps/ledger-live-mobile/src/const/navigation.ts
@@ -321,6 +321,8 @@ export enum ScreenName {
// ton
TonEditComment = "TonEditComment",
+ // mina
+ MinaEditMemo = "MinaEditMemo",
// Algorand
AlgorandEditMemo = "AlgorandEditMemo",
diff --git a/apps/ledger-live-mobile/src/families/index.ts b/apps/ledger-live-mobile/src/families/index.ts
index 48e6aa372226..d148167deda8 100644
--- a/apps/ledger-live-mobile/src/families/index.ts
+++ b/apps/ledger-live-mobile/src/families/index.ts
@@ -7,6 +7,7 @@ export * from "./multiversx";
export * from "./evm";
export * from "./hedera";
export * from "./internet_computer";
+export * from "./mina";
export * from "./near";
export * from "./polkadot";
export * from "./xrp";
diff --git a/apps/ledger-live-mobile/src/families/mina/AccountSubHeader.tsx b/apps/ledger-live-mobile/src/families/mina/AccountSubHeader.tsx
new file mode 100644
index 000000000000..d7b737b0bcb3
--- /dev/null
+++ b/apps/ledger-live-mobile/src/families/mina/AccountSubHeader.tsx
@@ -0,0 +1,8 @@
+import React from "react";
+import AccountSubHeader from "~/components/AccountSubHeader";
+
+function MinaAccountSubHeader() {
+ return ;
+}
+
+export default MinaAccountSubHeader;
diff --git a/apps/ledger-live-mobile/src/families/mina/ScreenEditMemo.tsx b/apps/ledger-live-mobile/src/families/mina/ScreenEditMemo.tsx
new file mode 100644
index 000000000000..a584723d6d61
--- /dev/null
+++ b/apps/ledger-live-mobile/src/families/mina/ScreenEditMemo.tsx
@@ -0,0 +1,119 @@
+import invariant from "invariant";
+import React, { useCallback, useState } from "react";
+import { View, StyleSheet, ScrollView } from "react-native";
+import { SafeAreaView } from "react-native-safe-area-context";
+import { useSelector } from "react-redux";
+import { useTranslation } from "react-i18next";
+import i18next from "i18next";
+import { getAccountBridge } from "@ledgerhq/live-common/bridge/index";
+import { useIsFocused, useTheme } from "@react-navigation/native";
+import KeyboardView from "~/components/KeyboardView";
+import Button from "~/components/Button";
+import { ScreenName } from "~/const";
+import { accountScreenSelector } from "~/reducers/accounts";
+import TextInput from "~/components/FocusedTextInput";
+import { BaseComposite, StackNavigatorProps } from "~/components/RootNavigator/types/helpers";
+import { SendFundsNavigatorStackParamList } from "~/components/RootNavigator/types/SendFundsNavigator";
+import { SignTransactionNavigatorParamList } from "~/components/RootNavigator/types/SignTransactionNavigator";
+import { SwapNavigatorParamList } from "~/components/RootNavigator/types/SwapNavigator";
+
+type NavigationProps = BaseComposite<
+ StackNavigatorProps<
+ SendFundsNavigatorStackParamList | SignTransactionNavigatorParamList | SwapNavigatorParamList,
+ ScreenName.MinaEditMemo
+ >
+>;
+
+function MinaEditMemo({ navigation, route }: NavigationProps) {
+ const isFocused = useIsFocused();
+ const { colors } = useTheme();
+ const { t } = useTranslation();
+ const { account } = useSelector(accountScreenSelector(route));
+ invariant(account, "account is required");
+ const [memo, setMemo] = useState(route.params?.transaction.memo);
+ const onChangeMemoValue = useCallback((str: string) => {
+ setMemo(str === "" ? undefined : str);
+ }, []);
+ const onValidateText = useCallback(() => {
+ const bridge = getAccountBridge(account);
+ const { transaction } = route.params;
+ // @ts-expect-error FIXME: No current / next navigation params?
+ navigation.navigate(ScreenName.SendSummary, {
+ accountId: account.id,
+ transaction: bridge.updateTransaction(transaction, {
+ memo: memo && memo.toString(),
+ }),
+ });
+ }, [navigation, route.params, account, memo]);
+ return (
+
+
+
+ {isFocused && (
+
+ )}
+
+
+
+
+
+
+
+ );
+}
+
+const options = {
+ title: i18next.t("send.summary.memo.value"),
+ headerLeft: undefined,
+};
+export { MinaEditMemo as component, options };
+const styles = StyleSheet.create({
+ root: {
+ flex: 1,
+ },
+ body: {
+ flexDirection: "column",
+ flex: 1,
+ },
+ textInputAS: {
+ padding: 16,
+ fontSize: 30,
+ },
+ buttonContainer: {
+ marginHorizontal: 16,
+ },
+ flex: {
+ flex: 1,
+ flexDirection: "column",
+ justifyContent: "flex-end",
+ paddingBottom: 16,
+ },
+});
diff --git a/apps/ledger-live-mobile/src/families/mina/SendRowMemo.tsx b/apps/ledger-live-mobile/src/families/mina/SendRowMemo.tsx
new file mode 100644
index 000000000000..6ec9ca64e131
--- /dev/null
+++ b/apps/ledger-live-mobile/src/families/mina/SendRowMemo.tsx
@@ -0,0 +1,81 @@
+import React, { useCallback } from "react";
+import { View, StyleSheet } from "react-native";
+import { Trans } from "react-i18next";
+import { useNavigation, useRoute, useTheme } from "@react-navigation/native";
+import type { Account } from "@ledgerhq/types-live";
+import type { Transaction as MinaTransaction } from "@ledgerhq/live-common/families/mina/types";
+import LText from "~/components/LText";
+import { ScreenName } from "~/const";
+import SummaryRow from "~/screens/SendFunds/SummaryRow";
+import { BaseComposite, StackNavigatorProps } from "~/components/RootNavigator/types/helpers";
+import { SendFundsNavigatorStackParamList } from "~/components/RootNavigator/types/SendFundsNavigator";
+import { SignTransactionNavigatorParamList } from "~/components/RootNavigator/types/SignTransactionNavigator";
+import { SwapNavigatorParamList } from "~/components/RootNavigator/types/SwapNavigator";
+
+type Navigation = BaseComposite<
+ | StackNavigatorProps
+ | StackNavigatorProps
+ | StackNavigatorProps
+>;
+
+type Props = {
+ account: Account;
+ transaction: MinaTransaction;
+} & Navigation;
+export default function MinaMemoRow({ account, transaction }: Props) {
+ const { colors } = useTheme();
+ const navigation = useNavigation();
+ const route = useRoute();
+ const editMemo = useCallback(() => {
+ navigation.navigate(ScreenName.MinaEditMemo, {
+ ...route.params,
+ accountId: account.id,
+ parentId: undefined,
+ account,
+ transaction,
+ });
+ }, [navigation, route.params, account, transaction]);
+ const memo = transaction.memo;
+ return (
+
+ {!memo ? (
+ } onPress={editMemo}>
+
+
+
+
+ ) : (
+ } onPress={editMemo}>
+
+ {String(memo)}
+
+
+ )}
+
+ );
+}
+const styles = StyleSheet.create({
+ memoContainer: {
+ flexDirection: "row",
+ },
+ tagText: {
+ fontSize: 14,
+ },
+ link: {
+ textDecorationStyle: "solid",
+ textDecorationLine: "underline",
+ marginLeft: 8,
+ },
+ memo: {
+ marginBottom: 10,
+ },
+});
diff --git a/apps/ledger-live-mobile/src/families/mina/SendRowsCustom.tsx b/apps/ledger-live-mobile/src/families/mina/SendRowsCustom.tsx
new file mode 100644
index 000000000000..d67d7c876a30
--- /dev/null
+++ b/apps/ledger-live-mobile/src/families/mina/SendRowsCustom.tsx
@@ -0,0 +1,29 @@
+import React from "react";
+import type { Account } from "@ledgerhq/types-live";
+import { Transaction as MinaTransaction } from "@ledgerhq/live-common/families/mina/types";
+import type { Transaction } from "@ledgerhq/live-common/generated/types";
+import SendRowMemo from "./SendRowMemo";
+import { BaseComposite, StackNavigatorProps } from "~/components/RootNavigator/types/helpers";
+import { SendFundsNavigatorStackParamList } from "~/components/RootNavigator/types/SendFundsNavigator";
+import { SignTransactionNavigatorParamList } from "~/components/RootNavigator/types/SignTransactionNavigator";
+import { SwapNavigatorParamList } from "~/components/RootNavigator/types/SwapNavigator";
+import { ScreenName } from "~/const";
+
+type Navigation = BaseComposite<
+ | StackNavigatorProps
+ | StackNavigatorProps
+ | StackNavigatorProps
+>;
+
+type Props = {
+ transaction: Transaction;
+ account: Account;
+} & Navigation;
+export default function MinaSendRowsCustom(props: Props) {
+ const { transaction, ...rest } = props;
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/apps/ledger-live-mobile/src/families/mina/index.ts b/apps/ledger-live-mobile/src/families/mina/index.ts
new file mode 100644
index 000000000000..e8a30a4f4494
--- /dev/null
+++ b/apps/ledger-live-mobile/src/families/mina/index.ts
@@ -0,0 +1,3 @@
+import * as MinaEditMemo from "./ScreenEditMemo";
+
+export { MinaEditMemo };
diff --git a/apps/ledger-live-mobile/src/families/mina/operationDetails.tsx b/apps/ledger-live-mobile/src/families/mina/operationDetails.tsx
new file mode 100644
index 000000000000..b1cf401e3629
--- /dev/null
+++ b/apps/ledger-live-mobile/src/families/mina/operationDetails.tsx
@@ -0,0 +1,36 @@
+import React from "react";
+import { useTranslation } from "react-i18next";
+import Section from "~/screens/OperationDetails/Section";
+import { MinaOperation } from "@ledgerhq/live-common/families/mina/types";
+import { formatCurrencyUnit } from "@ledgerhq/live-common/currencies/index";
+import { getCryptoCurrencyById } from "@ledgerhq/live-common/currencies/index";
+import BigNumber from "bignumber.js";
+
+type Props = {
+ operation: MinaOperation;
+};
+
+function OperationDetailsExtra({ operation }: Props) {
+ const { t } = useTranslation();
+ return (
+ <>
+ {operation.extra.memo && (
+
+ )}
+ {operation.extra.accountCreationFee && (
+
+ )}
+ >
+ );
+}
+
+export default {
+ OperationDetailsExtra,
+};
diff --git a/apps/ledger-live-mobile/src/live-common-setup.ts b/apps/ledger-live-mobile/src/live-common-setup.ts
index b871273aaa7e..67f24dc85133 100644
--- a/apps/ledger-live-mobile/src/live-common-setup.ts
+++ b/apps/ledger-live-mobile/src/live-common-setup.ts
@@ -137,6 +137,7 @@ setSupportedCurrencies([
"zenrock",
"sonic",
"sonic_blaze",
+ "mina",
]);
if (Config.BLE_LOG_LEVEL) BluetoothTransport.setLogLevel(Config.BLE_LOG_LEVEL);
diff --git a/apps/ledger-live-mobile/src/locales/ar/common.json b/apps/ledger-live-mobile/src/locales/ar/common.json
index 639e612c0a2a..e04085536152 100644
--- a/apps/ledger-live-mobile/src/locales/ar/common.json
+++ b/apps/ledger-live-mobile/src/locales/ar/common.json
@@ -831,11 +831,11 @@
"title" : "ربما تكون معاملتك قد فشلت. يُرجى الانتظار لحظة ثم تحقق من سجل المعاملات قبل المحاولة مرة أخرى."
},
"SolanaRecipientMemoIsRequired" : {
- "title" : "Memo is required for recipient address"
+ "title" : "الملاحظة (تسمية الوجهة) مطلوبة من أجل عنوان المستلم"
},
"SolanaTokenNonTransferable" : {
- "title" : "Token is non-transferable",
- "description" : "Such tokens are \"soul-bound\" and cannot be transferred"
+ "title" : "رمز التوكن غير قابل للتحويل",
+ "description" : "رموز التوكن تلك هي ”soul-bound (رموز مرتبطة بالروح)“ ولا يمكن تحويلها"
},
"CardanoMinAmountError" : {
"title" : "الحد الأدنى للمبلغ القابل للإرسال هو {{amount}} ADA"
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "فشل تحميل تطبيق Swap Live"
+ },
+ "InvalidMemoMina" : {
+ "title" : "نص علامة الملاحظة (تسمية الوجهة) لا يمكن أن يكون أطول من 32 حرفاً"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "هذه المعاملة ستُكلّف رسوم إنشاء حساب بقيمة {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "الحد الأدنى للمبلغ المطلوب لهذه المعاملة هو {{amount}}"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "حد الغاز",
"id" : "المُعرّف",
"autoClaimedRewards" : "المكافآت المطالب بها تلقائياً",
- "stakedAmount" : "المبلغ المُكدَّس"
+ "stakedAmount" : "المبلغ المُكدَّس",
+ "accountCreationFee" : "رسوم إنشاء الحساب"
},
"multipleAddresses" : "لماذا عناوين متعددة؟",
"tokenName" : "اسم رمز التوكن",
@@ -2626,6 +2636,10 @@
"description3Link" : "هذا الدمج تم تنفيذه من قِبل <1><0>{{team}}1>0> بالتعاون مع Ledger"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} تُرحَّل إلى {{to}}. اتبع هذا <0>الرابط0> لمعرفة المزيد أو تواصل مع الدعم إذا كنت بحاجة إلى مساعدة.",
+ "contactSupport" : "تواصل مع الدعم"
+ },
"willBedeprecatedBanner" : {
"title" : "لتحسين الكفاءة، {{currencyName}} لن تكون مدعومةً على Ledger Live بدءاً من {{deprecatedDate}}. مع ذلك، ستظل مدعومةً على محافظ أجهزة Ledger. يُرجى التواصل مع دعم عملاء Ledger إذا كنت ترغب في الحصول على مساعدة حول ذلك.",
"contactSupport" : "تواصل مع الدعم"
@@ -3534,12 +3548,12 @@
"apt_description" : "لمبادلة Aptos، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
"cosmos_title" : "™Ledger Nano S لا تدعم مبادلة Cosmos",
"cosmos_description" : "لمبادلة Cosmos، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "™Ledger Nano S لا تدعم مبادلة Osmosis",
+ "osmo_description" : "لمبادلة Osmosis، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
+ "dydx_title" : "™Ledger Nano S لا تدعم مبادلة dYdX",
+ "dydx_description" : "لمبادلة dYdX، استخدم أي جهاز Ledger متوافق آخر مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax.",
+ "sui_title" : "™Ledger Nano S لا تدعم مبادلة Sui",
+ "sui_description" : "لمبادلة Sui، استخدِم أي جهاز Ledger آخر متوافق مثل ™Ledger Nano S Plus أو ™Ledger Nano X أو ™Ledger Flex أو ™Ledger Stax."
}
},
"lending" : {
@@ -6037,63 +6051,63 @@
"frozenStateWarning" : "تمّ تجميد أصول الحساب!",
"transferWarning" : "للتحقق من عنوان المستلم لرموز سولانا (Solana) باستخدام ™Ledger Nano S، <0>يرجى اتباع هذه التعليمات.0>",
"transferFees" : {
- "title" : "Transfer fees",
- "feesPercentHint" : "Token has {{feePercent}}% ({{feeBps}}bps) transfer fee ({{maxFee}} max)",
- "notice" : "Transfer fee {{fee}}%",
- "tooltipHint" : "Percentage of transfer withheld for token creator"
+ "title" : "رسوم التحويل",
+ "feesPercentHint" : "رمز التوكن عليه رسوم تحويل %{{feePercent}} ({{feeBps}} نقطة أساس) ({{maxFee}} بحد أقصى)",
+ "notice" : "رسوم التحويل %{{fee}}",
+ "tooltipHint" : "النسبة المئوية من التحويل المحتجزة من أجل منشئ رمز التوكن"
},
"nonTransferable" : {
- "notice" : "Token is non-transferable"
+ "notice" : "رمز التوكن غير قابل للتحويل"
},
"interestRate" : {
- "notice" : "Interest rate {{rate}}%",
- "tooltipHint" : "For cosmetic purposes only, no new tokens are created as a result of the interest"
+ "notice" : "مُعدل الفائدة %{{rate}}",
+ "tooltipHint" : "من أجل الأغراض التجميلية فقط، لم يتم إنشاء أي رموز توكن جديدة نتيجةً للفائدة"
},
"permanentDelegate" : {
- "notice" : "Permanent delegate authority is enabled",
- "initializationNotice" : "Permanent delegate authority is initialized but not enabled",
- "initializedNoticeTooltipHint" : "The delegate has the ability transfer or burn this token from your account",
- "tooltipHint" : "{{delegateAddress}}<0>0> has the ability transfer or burn this token from your account"
+ "notice" : "سُلطة المُفوِّض الدائم (Permanent delegate) مُمكّنة",
+ "initializationNotice" : "سُلطة المُفوِّض الدائم (Permanent delegate) بدأت لكنها غير مُمكّنة",
+ "initializedNoticeTooltipHint" : "المُفوِّض لديه القدرة على تحويل أو حرق رمز التوكن هذا من حسابك",
+ "tooltipHint" : "{{delegateAddress}}<0>0> لديه القدرة على تحويل أو حرق رمز التوكن هذا من حسابك"
},
"requiredMemoOnTransfer" : {
- "notice" : "Required memo on transfer is enabled",
- "tooltipHint" : "All incoming transfers to this account must have a memo"
+ "notice" : "الملاحظة (تسمية الوجهة) الإلزامية على التحويل مُمكّنة",
+ "tooltipHint" : "كل التحويلات الواردة إلى هذا الحساب يجب أن تكون مصحوبةً بملاحظة (تسمية الوجهة)"
},
"transferHook" : {
- "notice" : "Transfer hook is enabled",
- "initializationNotice" : "Transfer hook is initialized but not enabled",
- "tooltipHint" : "Token has extra functionality handled by {{programAddress}}<0>0>"
+ "notice" : "خُطّاف التحويل (Transfer hook) مُمكّن",
+ "initializationNotice" : "خُطّاف التحويل (Transfer hook) بدأ لكنه غير مُمكّن",
+ "tooltipHint" : "رمز التوكن له وظيفة إضافية يتم التعامل معها بواسطة {{programAddress}}<0>0>"
},
"extensionsInfo" : {
- "title" : "Solana token extensions",
- "commonInfo" : "Token extensions are the next generation of the Solana Token standard. They introduce a new set of ways to extend the normal token functionality with additional features such as confidential transfers, permanent delegate, custom transfer logic, extended metadata, and much more.",
+ "title" : "ملحقات رموز سولانا (Solana)",
+ "commonInfo" : "ملحقات الرموز هي الجيل القادم من معيار رمز سولانا (Solana). إنها تقدّم مجموعة جديدة من الطرق لتمديد وظيفة رمز التوكن العادية بميزات إضافية؛ مثل التحويلات السرية، والمُفوِّض الدائم (Permanent Delegate)، ومنطق التحويل المخصص، والبيانات الوصفية الممتدة، والكثير غير ذلك.",
"permanentDelegate" : {
- "title" : "Permanent delegate",
- "permanentDelegateAddress" : "Current delegate authority is {{address}}",
- "permanentDelegateNotSetup" : "Current delegate authority is not set up.",
- "description" : "Permanent delegate is an authority which has unlimited delegate privileges over any account for that mint. The delegate could burn or transfer any amount of tokens, at any time, on their own authority."
+ "title" : "المُفوِّض الدائم (Permanent Delegate)",
+ "permanentDelegateAddress" : "سلطة المُفوِّض الحالية هي {{address}}",
+ "permanentDelegateNotSetup" : "سلطة المُفوِّض الحالية لم يتم إعدادها.",
+ "description" : "المُفوِّض الدائم (Permanent Delegate) هو سلطة لديها امتيازات تفويض غير محدودة على أي حساب من أجل ذلك السكّ. المُفوِّض يمكن أن يقوم بحرق أو تحويل أي مبلغ من رموز التوكن، في أي وقت، ضمن سلطته."
},
"nonTransferable" : {
- "title" : "Non-Transferrable Tokens",
- "description" : "Such tokens are \"soul-bound\" and cannot be moved or burned, except by the token issuer."
+ "title" : "الرموز غير القابلة للتحويل",
+ "description" : "رموز التوكن تلك هي ”soul-bound (رموز مرتبطة بالروح)“ ولا يمكن نقلها أو حرقها إلا بواسطة مُصدر رمز التوكن."
},
"transferHook" : {
- "title" : "Transfer hook",
- "transferHookAddress" : "Current transfer hook program is {{address}}",
- "transferHookNotSetup" : "Current transfer hook program is not set up.",
- "description" : "Transfer hook gives a token issuers an ability to dictate how users and tokens interact. Instead of a normal transfer, issuer can insert custom logic into a program to be used with the transfer hook extension."
+ "title" : "خُطّاف التحويل (Transfer hook)",
+ "transferHookAddress" : "برنامج خُطّاف التحويل (Transfer hook) الحالي هو {{address}}",
+ "transferHookNotSetup" : "برنامج خُطّاف التحويل (Transfer hook) الحالي لم يتم إعداده.",
+ "description" : "خُطّاف التحويل (Transfer hook) يمنح مُصدري رموز التوكن قدرة على إملاء كيفية تفاعل المستخدمين ورموز التوكن. بدلاً من التحويل العادي، يمكن للمُصدر أن يُدخِل منطقاً مخصصاً في برنامج سيتم استخدامه مع ملحق خُطّاف التحويل (Transfer hook)."
},
"transferFee" : {
- "title" : "Transfer Fee",
- "currentTransferFee" : "Current transfer fee is {{feePercent}}% ({{feeBps}}bps). Max {{maxFee}}.",
- "description" : "Fees are charged on every transfer of a token and withheld on the recipient account, untouchable by the recipient."
+ "title" : "رسوم التحويل",
+ "currentTransferFee" : "رسوم التحويل الحالية هي %{{feePercent}} ({{feeBps}} نقطة أساس (bps) ). أقصى حد {{maxFee}}.",
+ "description" : "يتم فرض الرسوم على كل تحويل لرمز توكن وتُحجز على حساب المستلم، ولا يمكن للمستلم المساس بها."
},
"interestBearing" : {
- "title" : "Interest-Bearing Tokens",
- "currentInterestRate" : "Current interest rate is {{rate}}%.",
- "accruedDelta" : "Accrued {{delta}}.",
- "interestRateNotSetup" : "Current interest rate is set up to 0%.",
- "description" : "Tokens that constantly grow or decrease in value according on its interest rate. No new tokens are ever created, the feature is entirely cosmetic."
+ "title" : "رموز التوكن المُدرة للفائدة",
+ "currentInterestRate" : "مُعدل الفائدة الحالي هو %{{rate}}.",
+ "accruedDelta" : "المتراكمة {{delta}}.",
+ "interestRateNotSetup" : "مُعدل الفائدة الحالي تم تعيينه ليكون %0.",
+ "description" : "رموز التوكن التي تنمو أو تنخفض قيمتها باستمرار وفقاً لمعدل فائدتها. لا يتم إنشاء أي رموز توكن جديدة على الإطلاق، الميزة تجميلية بشكل كامل."
}
}
}
@@ -6795,7 +6809,7 @@
"hide" : "إخفاء {{count}} مجموعة",
"hiddenCollections" : "المجموعات المخفية",
"hide_plural" : "إخفاء {{count}} مجموعة",
- "empty" : "No Hidden collections to show",
+ "empty" : "ليس هناك مجموعات مخفية لعرضها",
"alertHide" : "تم إخفاء 1 مجموعة. يمكنك إلغاء إخفائها في أي وقت من تصفية المعرض.",
"alertHide_plural" : "تم إخفاء {{count}} مجموعة. يمكنك إلغاء إخفائها في أي وقت من تصفية المعرض."
},
diff --git a/apps/ledger-live-mobile/src/locales/de/common.json b/apps/ledger-live-mobile/src/locales/de/common.json
index dee4208fce95..ff1949b5f455 100644
--- a/apps/ledger-live-mobile/src/locales/de/common.json
+++ b/apps/ledger-live-mobile/src/locales/de/common.json
@@ -127,7 +127,7 @@
},
"BluetoothRequired" : {
"title" : "Entschuldigung, Bluetooth ist deaktiviert",
- "description" : "Bitte aktivieren Sie Bluetooth in den Einstellungen Ihres Telefons. ({{state}} Status)"
+ "description" : "Bitte aktiviere Bluetooth in den Einstellungen deines Telefons. ({{state}} Status)"
},
"BitcoinInfrastructureError" : {
"title" : "Bei unserer Bitcoin-Infrastruktur ist ein Problem aufgetreten. Versuche es bitte später noch einmal."
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "Fehler beim Laden der Swap Live-App"
+ },
+ "InvalidMemoMina" : {
+ "title" : "Der Memotext darf nicht länger als 32 Zeichen sein."
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Für diese Transaktion fällt eine Kontoerstellungsgebühr in Höhe von {{fee}} an"
+ },
+ "AmountTooSmall" : {
+ "title" : "Der Mindestbetrag für diese Transaktion beläuft sich auf {{amount}}"
}
},
"crash" : {
@@ -1069,9 +1078,9 @@
"required" : "Entschuldigung, es sieht so aus, als ob Bluetooth deaktiviert ist",
"locationRequiredTitle" : "Standort ist für Bluetooth LE erforderlich",
"locationRequiredMessage" : "Unter Android ist eine Standortfreigabe erforderlich, um Bluetooth LE-Geräte aufzulisten.",
- "checkEnabled" : "Bitte aktivieren Sie Bluetooth in den Einstellungen Ihres Telefons.",
+ "checkEnabled" : "Bitte aktivier Bluetooth in den Einstellungen deines Telefons.",
"tryEnablingAgain" : "Versuchen Sie, Bluetooth erneut zu aktivieren",
- "openSettings" : "Öffnen Sie die Bluetooth-Einstellungen"
+ "openSettings" : "Öffne die Bluetooth-Einstellungen"
},
"webview" : {
"noConnectionError" : {
@@ -1430,7 +1439,7 @@
},
"ongoing" : {
"resolving" : "Auflösen von Abhängigkeiten",
- "progress" : "Bleiben Sie auf Ledger Live, während die Apps installiert werden.",
+ "progress" : "Bleibe auf Ledger Live, während die Apps installiert werden.",
"skippedInfo" : "Einige Apps sind nicht verfügbar. Sie müssen noch entwickelt werden für {{ productName }}.",
"skipped" : "Noch nicht verfügbar für {{ productName }}"
}
@@ -1610,7 +1619,7 @@
"label" : "Nehmen Sie einen Stift zum Schreiben."
},
"2" : {
- "label" : "Bleiben Sie allein, und wählen Sie eine sichere und ruhige Umgebung."
+ "label" : "Sei allein und wähle eine sichere und ruhige Umgebung."
}
},
"cta" : "Weiter",
@@ -2369,9 +2378,9 @@
"title" : "Erste Schritte",
"description" : "Sie können entweder Kryptowährungen von unseren Partnern kaufen oder Ihre eigene Wallet einrichten"
},
- "title" : "Legen Sie zunächst Ihre bevorzugten Vermögenswerte in Ihrer Wallet ab",
+ "title" : "Füge zu Beginn deine Assets zu deiner Wallet hinzu",
"subtitle" : "Ledger unterstützt mehr als 6.000 Coins und Token",
- "addAccount" : "oder fügen Sie ein Konto hinzu"
+ "addAccount" : "oder füge ein Konto hinzu"
},
"noOpState" : {
"title" : "Noch keine Aktionen?",
@@ -2593,7 +2602,8 @@
"gasLimit" : "Gaslimit",
"id" : "ID",
"autoClaimedRewards" : "Automatisch beanspruchte Prämien",
- "stakedAmount" : "Betrag gestaked"
+ "stakedAmount" : "Betrag gestaked",
+ "accountCreationFee" : "Kontoerstellungsgebühr"
},
"multipleAddresses" : "Warum mehrere Adressen?",
"tokenName" : "Token-Name",
@@ -2626,6 +2636,10 @@
"description3Link" : "Diese Integration wurde von <1><0>{{team}}0>1> in Zusammenarbeit mit Ledger durchgeführt"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} migriert zu {{to}}. Folge diesem <0>Link0>, um mehr zu erfahren, oder wende dich an den Kundenservice, falls du Hilfe benötigst.",
+ "contactSupport" : "Support kontaktieren"
+ },
"willBedeprecatedBanner" : {
"title" : "Um die Effizienz zu steigern, wird {{currencyName}} ab dem {{deprecatedDate}} nicht mehr in Ledger Live unterstützt. Auf den Hardware-Wallets von Ledger bleibt die Unterstützung jedoch bestehen. Wenn du Hilfe benötigst, wende dich bitte an den Ledger-Kundenservice.",
"contactSupport" : "Support kontaktieren"
@@ -3174,7 +3188,7 @@
"notifications" : {
"prompt" : {
"title" : "Benachrichtigungen aktivieren",
- "desc" : "Erhalten Sie die neuesten Updates zu Ledger Live, Ledger-Produkten, dem Markt und personalisierte Empfehlungen. Sie können sich jederzeit in den Einstellungen wieder abmelden",
+ "desc" : "Erhalte die neuesten Updates zu Ledger Live, Ledger-Produkten, dem Markt und personalisierte Empfehlungen. Du kannst dich jederzeit in den Einstellungen wieder abmelden",
"allow" : "Benachrichtigungen zulassen",
"later" : "Vielleicht später"
},
@@ -3534,12 +3548,12 @@
"apt_description" : "Zum Swappen von Aptos müsstest du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
"cosmos_title" : "Ledger Nano S™ unterstützt das Swappen von Cosmos nicht",
"cosmos_description" : "Zum Swappen von Cosmos müsstest du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™ unterstützt das Swappen von Osmosis nicht",
+ "osmo_description" : "Zum Swappen von Osmosis musst du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
+ "dydx_title" : "Ledger Nano S™ unterstützt das Swappen von dYdX nicht",
+ "dydx_description" : "Zum Swappen von dYdX musst du ein anderes kompatibles Ledger-Gerät verwenden, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™.",
+ "sui_title" : "Die Ledger Nano S™ unterstützt das Swappen von Sui nicht",
+ "sui_description" : "Zum Swappen von Sui kannst du jedes sonstige kompatible Ledger-Gerät nutzen, z. B. eine Ledger Nano S Plus™, eine Ledger Nano X™, eine Ledger Flex™ oder eine Ledger Stax™."
}
},
"lending" : {
@@ -4144,8 +4158,8 @@
"chooseAccountToFund" : "Wähle ein Konto aus, um Guthaben hinzuzufügen"
},
"DeviceAction" : {
- "stayInTheAppPlz" : "Bleiben Sie in der Ledger Live-App und halten Sie Ihr Ledger-Gerät bereit.",
- "allowAppPermission" : "Öffnen Sie die {{wording}} App auf Ihrem Gerät",
+ "stayInTheAppPlz" : "Bleib in der Ledger Live-App und halte dein Ledger-Gerät bereit.",
+ "allowAppPermission" : "Öffne die {{wording}} App auf deinem Gerät",
"allowAppPermissionSubtitleToken" : "zum Verwalten Ihrer {{token}}-Tokens",
"allowManagerPermission" : "Lassen Sie eine sichere Verbindung mit Ledger zu",
"allowRenaming" : "Umbenennen auf deinem {{productName}}-Gerät zulassen",
@@ -4242,7 +4256,7 @@
"title" : "Zurück zum Dashboard auf Ihrem {{productName}}"
},
"currencyApp" : {
- "title" : "Öffnen Sie die App {{managerAppName}} auf Ihrem {{productName}}",
+ "title" : "Öffne die App {{managerAppName}} auf deinem {{productName}}",
"description" : "",
"footer" : {
"appInstalled" : "Sie haben die App nicht installiert",
@@ -4250,7 +4264,7 @@
}
},
"accountApp" : {
- "title" : "Öffnen Sie die App {{managerAppName}} auf Ihrem {{productName}}",
+ "title" : "Öffne die App {{managerAppName}} auf deinem {{productName}}",
"description" : ""
},
"receiveVerify" : {
@@ -4345,7 +4359,7 @@
"installedApps" : "Installierte Apps",
"noAppNeededForToken" : "Installieren Sie die App {{appName}} für {{tokenName}}",
"tokenAppDisclaimer" : "{{tokenName}} ist ein {{tokenType}} -Token mit der {{appName}} -App. Um {{tokenName}} zu verwalten, <1>installieren Sie die {{appName}} -App1> und senden Sie die Token <3>zu Ihrem {{appName}}-Konto3>.",
- "tokenAppDisclaimerInstalled" : "{{tokenName}} ist ein {{tokenType}}-Token mit der {{appName}}-App. Um {{tokenName}} zu verwalten, <1>öffnen Sie die {{appName}}-App1> und senden Sie die Token <3>zu Ihrem {{appName}}-Konto3>.",
+ "tokenAppDisclaimerInstalled" : "{{tokenName}} ist ein {{tokenType}}-Token mit der {{appName}}-App. Um {{tokenName}} zu verwalten, <1>öffne die {{appName}}-App1> und sende die Token <3>zu deinem {{appName}}-Konto3>.",
"goToAccounts" : "Zu den Konten gehen",
"intallParentApp" : "{{appName}} App installieren",
"readOnly" : {
@@ -6748,9 +6762,9 @@
"viewWallet" : "Portfolio entdecken"
},
"entryPointCard" : {
- "title" : "Was gibt es noch für Ihr {{productName}}?",
+ "title" : "Was gibt es noch für deine {{productName}}?",
"description" : "Übertrage deine Vermögenswerte von jeder Börse oder Wallet, kaufe Kryptowährungen, gestalte deinen Sperrbildschirm individuell oder abonniere Ledger Recover.",
- "buttonLabel" : "Schauen Sie, was als nächstes kommt"
+ "buttonLabel" : "Schaue, was als nächstes kommt"
},
"actions" : {
"assetsTransfer" : {
diff --git a/apps/ledger-live-mobile/src/locales/en/common.json b/apps/ledger-live-mobile/src/locales/en/common.json
index bf3d4b21bfe9..d5a3235b79db 100644
--- a/apps/ledger-live-mobile/src/locales/en/common.json
+++ b/apps/ledger-live-mobile/src/locales/en/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError": {
"title": "Failed to load Swap Live App"
+ },
+ "InvalidMemoMina": {
+ "title": "Memo text cannot be longer than 32 characters"
+ },
+ "AccountCreationFeeWarning": {
+ "title": "This transaction will incur an account creation fee of {{fee}}"
+ },
+ "AmountTooSmall": {
+ "title": "Minimum required amount for this transaction is {{amount}}"
}
},
"crash": {
@@ -2593,7 +2602,8 @@
"gasLimit": "Gas Limit",
"id": "Id",
"autoClaimedRewards": "Auto Claimed Rewards",
- "stakedAmount": "Staked amount"
+ "stakedAmount": "Staked amount",
+ "accountCreationFee": "Account Creation Fee"
},
"multipleAddresses": "Why multiple addresses?",
"tokenName": "Token Name",
diff --git a/apps/ledger-live-mobile/src/locales/es/common.json b/apps/ledger-live-mobile/src/locales/es/common.json
index 3ca1a1b44e4e..b669c3f2c325 100644
--- a/apps/ledger-live-mobile/src/locales/es/common.json
+++ b/apps/ledger-live-mobile/src/locales/es/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "Error al cargar Aplicación Permuta de Live"
+ },
+ "InvalidMemoMina" : {
+ "title" : "El texto de un memo no debe superar los 32 caracteres"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Esta transacción conlleva asociada una tarifa de creación de cuenta de {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "La cantidad mínima necesaria para esta transacción es de {{amount}}"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "Límite de gas",
"id" : "Id",
"autoClaimedRewards" : "Recompensas Autoreclamadas",
- "stakedAmount" : "Cantidad en participación"
+ "stakedAmount" : "Cantidad en participación",
+ "accountCreationFee" : "Tarifa de creación de cuenta"
},
"multipleAddresses" : "¿Por qué hay múltiples direcciones?",
"tokenName" : "Nombre del token",
@@ -2626,6 +2636,10 @@
"description3Link" : "Esta integración la ha realizado <1><0>{{team}}0>1> en colaboración con Ledger"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} está migrando a {{to}}. Visita este <0>enlace0> para obtener más información o contacta con el equipo de soporte si necesitas ayuda.",
+ "contactSupport" : "Ponte en contacto con Soporte"
+ },
"willBedeprecatedBanner" : {
"title" : "Por razones de optimización de eficiencia, {{currencyName}} dejará de ser compatible con Ledger Live el {{deprecatedDate}}. No obstante, seguirá siendo compatible con las billeteras de hardware de Ledger. Ponte en contacto con el servicio de soporte al cliente de Ledger si necesitas ayuda con esto.",
"contactSupport" : "Ponte en contacto con Soporte"
@@ -3534,12 +3548,12 @@
"apt_description" : "Para permutar Aptos, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
"cosmos_title" : "No es posible usar el Ledger Nano S™ para permutar Cosmos",
"cosmos_description" : "Para permutar Cosmos, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "No es posible usar el Ledger Nano S™ para permutar Osmosis",
+ "osmo_description" : "Para permutar Osmosis, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
+ "dydx_title" : "No es posible usar el Ledger Nano S™ para permutar dYdX",
+ "dydx_description" : "Para permutar dYdX, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™.",
+ "sui_title" : "No es posible utilizar el Ledger Nano S™ para permutar Sui",
+ "sui_description" : "Para permutar Sui, usa cualquier otro dispositivo Ledger compatible, como el Ledger Nano S Plus™, el Ledger Nano X™, el Ledger Flex™ o el Ledger Stax™."
}
},
"lending" : {
diff --git a/apps/ledger-live-mobile/src/locales/fr/common.json b/apps/ledger-live-mobile/src/locales/fr/common.json
index f4bed980dd32..31891d976469 100644
--- a/apps/ledger-live-mobile/src/locales/fr/common.json
+++ b/apps/ledger-live-mobile/src/locales/fr/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "Échec du chargement de l’app Live Swap"
+ },
+ "InvalidMemoMina" : {
+ "title" : "Le mémo ne peut pas dépasser 32 caractères"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Les frais de création de compte pour cette transaction s’élèveront à {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "Le montant minimal requis pour cette transaction est {{amount}}"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "Limite de gaz",
"id" : "Identifiant (ID)",
"autoClaimedRewards" : "Récompenses automatiques",
- "stakedAmount" : "Montant en staking"
+ "stakedAmount" : "Montant en staking",
+ "accountCreationFee" : "Frais de création de compte"
},
"multipleAddresses" : "Pourquoi plusieurs adresses ?",
"tokenName" : "Nom du token",
@@ -2626,6 +2636,10 @@
"description3Link" : "Cette intégration a été réalisée par <1><0>{{team}}0>1> en collaboration avec Ledger."
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} migre vers {{to}}. Cliquez <0>ici0> pour en savoir plus ou contactez l’Assistance si vous avez besoin d’aide.",
+ "contactSupport" : "Contacter l’Assistance"
+ },
"willBedeprecatedBanner" : {
"title" : "Pour une meilleure performance, Ledger Live ne prendra plus en charge {{currencyName}} à partir du {{deprecatedDate}}. Cette monnaie restera prise en charge par les wallets physiques Ledger. Veuillez contacter l’Assistance Ledger pour toute question.",
"contactSupport" : "Contacter l’Assistance"
@@ -3534,12 +3548,12 @@
"apt_description" : "Pour échanger des Aptos, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"cosmos_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de Cosmos",
"cosmos_description" : "Pour échanger des Cosmos, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange d’Osmosis",
+ "osmo_description" : "Pour échanger des Osmosis, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "dydx_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de dYdX",
+ "dydx_description" : "Pour échanger des dYdX, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "sui_title" : "Le Ledger Nano S™ ne prend pas en charge l’échange de Sui",
+ "sui_description" : "Pour échanger des Sui, utilisez un autre appareil Ledger compatible, tel que le Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™."
}
},
"lending" : {
diff --git a/apps/ledger-live-mobile/src/locales/ja/common.json b/apps/ledger-live-mobile/src/locales/ja/common.json
index b0962b1834ed..a95ec2cac189 100644
--- a/apps/ledger-live-mobile/src/locales/ja/common.json
+++ b/apps/ledger-live-mobile/src/locales/ja/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "スワップLiveアプリの読み込みに失敗しました"
+ },
+ "InvalidMemoMina" : {
+ "title" : "メモに入力できる文字数は32文字以内です"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "このトランザクションには、{{fee}}のアカウント作成手数料が発生します"
+ },
+ "AmountTooSmall" : {
+ "title" : "このトランザクションに最低限必要な金額は、{{amount}}です"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "ガスリミット",
"id" : "ID",
"autoClaimedRewards" : "自動獲得報酬",
- "stakedAmount" : "ステーキング済み量"
+ "stakedAmount" : "ステーキング済み量",
+ "accountCreationFee" : "アカウント作成手数料"
},
"multipleAddresses" : "なぜ複数のアドレスがあるのですか?",
"tokenName" : "トークン名",
@@ -2626,6 +2636,10 @@
"description3Link" : "この統合は、<1><0>{{team}}0>1>がLedgerと共同で実施しました"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}}は{{to}}に移行しています。詳細については、こちらの<0>リンク0>をご参照いただくか、サポートがご必要な場合はサポートにご連絡ください。",
+ "contactSupport" : "サポートへお問い合わせ"
+ },
"willBedeprecatedBanner" : {
"title" : "効率を最適化するため、{{deprecatedDate}}以降、{{currencyName}}はLedger Liveではサポートされなくなります。ただし、Ledgerハードウェアウォレットでは引き続きサポートされます。この件に関してご不明な点などがございましたら、Ledgerカスタマーサポートまでご連絡ください。",
"contactSupport" : "サポートへお問い合わせ"
@@ -3534,12 +3548,12 @@
"apt_description" : "Aptosをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
"cosmos_title" : "Ledger Nano S™はCosmosのスワップに対応していません",
"cosmos_description" : "Cosmosをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™は、Osmosisのスワップに対応していません",
+ "osmo_description" : "Osmosisをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
+ "dydx_title" : "Ledger Nano S™は、dYdXのスワップに対応していません",
+ "dydx_description" : "dYdXをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、Ledger Stax™など、対応する他のLedgerデバイスをご使用ください。",
+ "sui_title" : "Ledger Nano S™は、Suiのスワップに対応していません",
+ "sui_description" : "Suiをスワップするには、Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™、またはLedger Stax™など、他の対応するLedgerデバイスをご使用ください。"
}
},
"lending" : {
diff --git a/apps/ledger-live-mobile/src/locales/ko/common.json b/apps/ledger-live-mobile/src/locales/ko/common.json
index 6622b799c659..4ae52818c7a6 100644
--- a/apps/ledger-live-mobile/src/locales/ko/common.json
+++ b/apps/ledger-live-mobile/src/locales/ko/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "Swap Live 앱을 로드하지 못했습니다"
+ },
+ "InvalidMemoMina" : {
+ "title" : "메모 텍스트는 32자를 초과할 수 없습니다."
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "이 트랜잭션에는 {{fee}}의 계정 생성 수수료가 부과됩니다."
+ },
+ "AmountTooSmall" : {
+ "title" : "이 트랜잭션에 필요한 최소 금액은 {{amount}}입니다"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "가스 한도",
"id" : "Id",
"autoClaimedRewards" : "자동으로 청구된 보상",
- "stakedAmount" : "스테이킹 금액"
+ "stakedAmount" : "스테이킹 금액",
+ "accountCreationFee" : "계정 생성 수수료"
},
"multipleAddresses" : "왜 주소가 여러 개인가요?",
"tokenName" : "토큰명",
@@ -2626,6 +2636,10 @@
"description3Link" : "이 통합은 Ledger와 협력을 통해 <1><0>{{team}}0>1>에서 수행했습니다."
}
},
+ "migrationBanner" : {
+ "title" : "{{from}}가 {{to}}으로 마이그레이션되고 있습니다. <0>이 링크0>에서 자세한 내용을 알아보고, 도움이 필요한 경우 지원팀에 문의하세요.",
+ "contactSupport" : "지원 부서 연락"
+ },
"willBedeprecatedBanner" : {
"title" : "효율성을 최적화하기 위해 {{currencyName}}은 {{deprecatedDate}}부터 Ledger Live에서 지원되지 않습니다. 그러나 Ledger 하드웨어 지갑에서는 계속 지원됩니다. 이와 관련하여 도움이 필요하다면 Ledger 고객 지원팀에 문의하세요.",
"contactSupport" : "지원 부서 연락"
@@ -3534,12 +3548,12 @@
"apt_description" : "Aptos 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
"cosmos_title" : "Ledger Nano S™는 Cosmos 스왑을 지원하지 않습니다.",
"cosmos_description" : "Cosmos 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™는 Osmosis 스왑을 지원하지 않습니다.",
+ "osmo_description" : "Osmosis 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
+ "dydx_title" : "Ledger Nano S™는 dYdX 스왑을 지원하지 않습니다.",
+ "dydx_description" : "dYdX 스왑 거래를 실행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 Ledger 장치를 사용하세요.",
+ "sui_title" : "Ledger Nano S™는 Sui 스왑을 지원하지 않습니다",
+ "sui_description" : "Sui 스왑 거래를 수행하려면 Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ 또는 Ledger Stax™와 같은 다른 호환 Ledger 장치를 사용하세요."
}
},
"lending" : {
diff --git a/apps/ledger-live-mobile/src/locales/pt/common.json b/apps/ledger-live-mobile/src/locales/pt/common.json
index e430dab36124..cbd702f764ad 100644
--- a/apps/ledger-live-mobile/src/locales/pt/common.json
+++ b/apps/ledger-live-mobile/src/locales/pt/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "Falha ao carregar o aplicativo Swap Live"
+ },
+ "InvalidMemoMina" : {
+ "title" : "O texto do memo não pode ter mais de 32 caracteres"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Esta transação incorrerá em uma taxa de criação de conta de {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "A quantia mínima exigida para esta transação é {{amount}}"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "Limite de gas",
"id" : "Id",
"autoClaimedRewards" : "Recompensas automaticamente resgatadas",
- "stakedAmount" : "Quantia aplicada"
+ "stakedAmount" : "Quantia aplicada",
+ "accountCreationFee" : "Taxa de Criação de Conta"
},
"multipleAddresses" : "Por que múltiplos endereços?",
"tokenName" : "Nome do token",
@@ -2626,6 +2636,10 @@
"description3Link" : "Esta integração foi realizada por <1><0>{{team}}0>1> em colaboração com a Ledger"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} está migrando para {{to}}. Siga este <0>link0> para saber mais ou entre em contato com o suporte se precisar de ajuda.",
+ "contactSupport" : "Falar com o suporte"
+ },
"willBedeprecatedBanner" : {
"title" : "Para otimizar a eficiência, {{currencyName}} não será mais compatível com o Ledger Live a partir de {{deprecatedDate}}. No entanto, este ativo ainda será compatível com as carteiras hardware Ledger. Fale com o Suporte ao Cliente Ledger para obter ajuda com isso.",
"contactSupport" : "Falar com o suporte"
@@ -3534,12 +3548,12 @@
"apt_description" : "Para trocar o ativo APTOS, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
"cosmos_title" : "A Ledger Nano S™ não é compatível com a troca de Cosmos",
"cosmos_description" : "Para trocar Cosmos, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "A Ledger Nano S™ não é compatível com a troca de Osmosis",
+ "osmo_description" : "Para trocar Osmosis, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "dydx_title" : "A Ledger Nano S™ não é compatível com trocas de dYdX",
+ "dydx_description" : "Para trocar o ativo dYdX, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™.",
+ "sui_title" : "A Ledger Nano S™ não é compatível com a troca de Sui",
+ "sui_description" : "Para trocar Sui, use qualquer outro dispositivo Ledger compatível, como a Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ ou Ledger Stax™."
}
},
"lending" : {
diff --git a/apps/ledger-live-mobile/src/locales/ru/common.json b/apps/ledger-live-mobile/src/locales/ru/common.json
index 530eac7b1250..fd2c2986db32 100644
--- a/apps/ledger-live-mobile/src/locales/ru/common.json
+++ b/apps/ledger-live-mobile/src/locales/ru/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "Не удалось загрузить приложение Swap Live"
+ },
+ "InvalidMemoMina" : {
+ "title" : "Содержимое Memo не может быть длиннее 32 символов"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Эта транзакция предполагает списание комиссии за создание счёта в {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "Минимальная необходимая сумма для этой транзакции — {{amount}}"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "Лимит Газа",
"id" : "ID",
"autoClaimedRewards" : "Автоматически запрошенные вознаграждения",
- "stakedAmount" : "В стейкинге"
+ "stakedAmount" : "В стейкинге",
+ "accountCreationFee" : "Комиссия за создание счёта"
},
"multipleAddresses" : "Почему несколько адресов?",
"tokenName" : "Название токена",
@@ -2626,6 +2636,10 @@
"description3Link" : "Эта интеграция проведена <1><0>{{team}}0>1> в сотрудничестве с Ledger."
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} становится {{to}}. Перейдите по <0>ссылке0>, чтобы узнать больше или связаться с Поддержкой при необходимости.",
+ "contactSupport" : "Написать в Поддержку"
+ },
"willBedeprecatedBanner" : {
"title" : "{{currencyName}} не будет поддерживаться в Ledger Live с {{deprecatedDate}} для оптимизации работы. При этом устройства Ledger по-прежнему смогут взаимодействовать с этим криптоактивом. Обратитесь в Поддержку Ledger, если понадобится помощь по данному вопросу.",
"contactSupport" : "Написать в Поддержку"
@@ -3534,12 +3548,12 @@
"apt_description" : "Для обмена Aptos используйте любое другое устройство Ledger. Это может быть Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ или Ledger Stax™.",
"cosmos_title" : "Ledger Nano S™ не поддерживает обмен Cosmos",
"cosmos_description" : "Для обмена Cosmos используйте любое другое устройство Ledger. Это может быть Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ или Ledger Stax™.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™ не поддерживает обмен Osmosis",
+ "osmo_description" : "Используйте другие совместимые устройства Ledger для обмена Osmosis. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™.",
+ "dydx_title" : "Ledger Nano S™ не поддерживает обмен dYdX",
+ "dydx_description" : "Используйте другие совместимые устройства Ledger для обмена dYdX. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™.",
+ "sui_title" : "Ledger Nano S™ не поддерживает обмен Sui",
+ "sui_description" : "Используйте другие совместимые устройства Ledger для обмена Sui. Это Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ и Ledger Stax™."
}
},
"lending" : {
@@ -3739,7 +3753,7 @@
},
"recover" : {
"title" : "Ledger Recover",
- "description" : "Восстановить кошелёк теперь проще простого",
+ "description" : "Восстановить кошелёк теперь проще простого.",
"tag" : "Месяц в подарок"
}
},
diff --git a/apps/ledger-live-mobile/src/locales/th/common.json b/apps/ledger-live-mobile/src/locales/th/common.json
index bb3a7201598e..30c124ccd0c4 100644
--- a/apps/ledger-live-mobile/src/locales/th/common.json
+++ b/apps/ledger-live-mobile/src/locales/th/common.json
@@ -453,7 +453,7 @@
"description" : "การออกจะเป็นการยกเลิกการอัปเดตแอปที่อยู่ระหว่างดำเนินการ",
"stay" : "ดำเนินการอัปเดตต่อ"
},
- "quit" : "ออกจาก My Ledger"
+ "quit" : "ออกจาก Ledger ของฉัน"
},
"ManagerUninstallBTCDep" : {
"title" : "ขออภัย ต้องมีแอปนี้",
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "โหลดแอป Swap Live ไม่สำเร็จ"
+ },
+ "InvalidMemoMina" : {
+ "title" : "Memo ไม่สามารถยาวเกิน 32 ตัวอักษร"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "ธุรกรรมนี้จะมีค่าธรรมเนียมการสร้างบัญชี {{fee}}"
+ },
+ "AmountTooSmall" : {
+ "title" : "จำนวนขั้นต่ำที่กำหนดสำหรับธุรกรรมนี้คือ {{amount}}"
}
},
"crash" : {
@@ -1246,7 +1255,7 @@
},
"vote" : {
"title" : "โหวตด้วย Ledger ของคุณ",
- "description" : "โหวตโดยตรงจาก Ledger Wallet ของคุณ"
+ "description" : "โหวตได้โดยตรงจากวอลเล็ทของคุณ"
},
"lending" : {
"title" : "ให้ยืมคริปโต",
@@ -1461,7 +1470,7 @@
"subtitle" : "เลือกว่า Ledger ของคุณเป็นอุปกรณ์เครื่องใหม่หรือได้รับการรีเซ็ตมาก่อน"
},
"accessWallet" : {
- "title" : "เข้าถึง Wallet ของคุณ",
+ "title" : "เข้าถึงวอลเล็ทของคุณ",
"subtitle" : "เลือกว่าติดตั้ง Ledger ของคุณแล้วหรือไม่"
},
"buyNano" : {
@@ -1529,7 +1538,7 @@
"or" : "หรือ",
"firstUse" : {
"section" : "ติดตั้ง Ledger {{model}} ของคุณ",
- "title" : "สร้าง Wallet ใหม่",
+ "title" : "สร้างวอลเล็ตใหม่",
"subTitle" : "ซึ่งจะเป็นการสร้าง Secret Recovery Phrase ใหม่",
"desc" : "มาเริ่มต้นและติดตั้งอุปกรณ์ของคุณกันเลย!",
"label" : "30 นาที"
@@ -2333,10 +2342,10 @@
}
},
"tabs" : {
- "portfolio" : "Wallet",
+ "portfolio" : "วอลเล็ต",
"accounts" : "บัญชี",
"transfer" : "การโอน",
- "manager" : "My Ledger",
+ "manager" : "Ledger ของฉัน",
"settings" : "การตั้งค่า",
"platform" : "แอป Live",
"discover" : "Discover",
@@ -2505,7 +2514,7 @@
"UNDELEGATE_RESOURCE" : "Undelegate แล้ว",
"WITHDRAW_EXPIRE_UNFREEZE" : "การถอน",
"LEGACYUNFREEZE" : "Unfreeze แล้ว",
- "REWARD" : "Reward ที่ขอรับแล้ว",
+ "REWARD" : "Reward ที่เคลมแล้ว",
"FEES" : "ค่าธรรมเนียม",
"OPT_IN" : "เลือกเข้าร่วม",
"OPT_OUT" : "เลือกไม่เข้าร่วม",
@@ -2592,8 +2601,9 @@
"storageLimit" : "พื้นที่เก็บสูงสุด",
"gasLimit" : "จำนวน Gas สูงสุดที่ยอมจ่าย",
"id" : "Id",
- "autoClaimedRewards" : "Reward ที่ขอรับอัตโนมัติ",
- "stakedAmount" : "จำนวนที่ Stake แล้ว"
+ "autoClaimedRewards" : "Reward ที่เคลมโดยอัตโนมัติ",
+ "stakedAmount" : "จำนวนที่ Stake แล้ว",
+ "accountCreationFee" : "ค่าธรรมเนียมการสร้างบัญชี"
},
"multipleAddresses" : "ทำไมต้องหลาย Address?",
"tokenName" : "ชื่อโทเคน",
@@ -2764,7 +2774,7 @@
},
"claimReward" : {
"sectionLabel" : "Reward",
- "cta" : "ขอรับ"
+ "cta" : "เคลม"
},
"undelegation" : {
"sectionLabel" : "การ Undelegate"
@@ -3087,7 +3097,7 @@
"description" : "แสดงแอปของนักพัฒนาและ Testnet ใน My Ledger"
},
"managerProvider" : {
- "title" : "ผู้ให้บริการ My Ledger",
+ "title" : "ผู้ให้บริการ Ledger ของฉัน",
"description" : "การเปลี่ยนผู้ให้บริการแอปใน My Ledger อาจทำให้ไม่สามารถติดตั้งหรือถอนการติดตั้งแอปบนอุปกรณ์ Ledger ของคุณได้"
},
"experimentalExplorers" : {
@@ -3739,11 +3749,11 @@
},
"walletConnect" : {
"title" : "WalletConnect",
- "description" : "เชื่อมต่อ Wallet ของคุณกับ DApps"
+ "description" : "เชื่อมต่อวอลเล็ทของคุณกับ DApps"
},
"recover" : {
"title" : "Ledger Recover",
- "description" : "กู้คืน Wallet ได้ง่าย ๆ",
+ "description" : "กู้คืนวอลเล็ทได้ง่าย ๆ",
"tag" : "ฟรี 1 เดือน"
}
},
@@ -4101,7 +4111,7 @@
},
"segwit" : {
"title" : "Segwit",
- "desc" : "ค่าธรรมเนียมต่อธุรกรรมสูงกว่า Native Segwit รองรับ Lightning รองรับโดย Wallet ส่วนใหญ่"
+ "desc" : "ค่าธรรมเนียมต่อธุรกรรมสูงกว่า Native Segwit รองรับ Lightning รองรับโดยวอลเล็ทส่วนใหญ่"
},
"legacy" : {
"title" : "Legacy",
@@ -4161,7 +4171,7 @@
"connectAnotherDevice" : "เชื่อมต่อกับ Ledger เครื่องอื่น",
"unlockDevice" : "ปลดล็อกอุปกรณ์ของคุณ",
"outdated" : "เวอร์ชันแอปล้าสมัยแล้ว",
- "outdatedDesc" : "มีการอัปเดตที่สำคัญสำหรับแอปพลิเคชัน {{appName}} บนอุปกรณ์ของคุณ โปรดไปที่ My Ledger เพื่ออัปเดต",
+ "outdatedDesc" : "มีการอัปเดตที่สำคัญสำหรับแอปพลิเคชัน {{appName}} บนอุปกรณ์ของคุณ โปรดไปที่ Ledger ของฉันเพื่ออัปเดต",
"quitApp" : "ออกจากแอปพลิเคชันบนอุปกรณ์ของคุณ",
"appNotInstalled" : "โปรดติดตั้งแอป {{appName}}",
"appNotInstalled_plural" : "โปรดติดตั้งแอป {{appName}}",
@@ -4323,8 +4333,8 @@
}
},
"manager" : {
- "tabTitle" : "My Ledger",
- "title" : "My Ledger",
+ "tabTitle" : "Ledger ของฉัน",
+ "title" : "Ledger ของฉัน",
"selectDevice" : {
"title" : "อุปกรณ์",
"addALedger" : "เพิ่ม Ledger",
@@ -4735,7 +4745,7 @@
"token" : "ASA (สินทรัพย์)",
"claimRewards" : {
"title" : "Reward",
- "button" : "ขอรับ",
+ "button" : "เคลม",
"stepperHeader" : {
"info" : "รับ Reward",
"starter" : "Reward",
@@ -4763,7 +4773,7 @@
},
"verification" : {
"success" : {
- "title" : "รับ Reward เรียบร้อยแล้ว!",
+ "title" : "เคลม Reward เรียบร้อยแล้ว!",
"text" : "Reward ของคุณได้รับการเพิ่มเข้าไปในยอดคงเหลือในบัญชีที่คุณใช้ได้แล้ว",
"cta" : "ไปที่บัญชี"
},
@@ -5195,15 +5205,15 @@
"delegation" : {
"delegationEarn" : "คุณสามารถรับ Reward {{ticker}} ได้ด้วยการ Delegate สินทรัพย์ของคุณ",
"info" : "Delegation ทำงานยังไง",
- "claimRewards" : "ขอรับ Reward",
- "claimAvailableRewards" : "ขอรับ {{amount}}",
+ "claimRewards" : "เคลม Reward",
+ "claimAvailableRewards" : "เคลม {{amount}}",
"header" : "การ Delegate",
"Amount" : "จำนวน",
"noRewards" : "ไม่มี Reward",
"delegate" : "Delegate",
"undelegate" : "Undelegate",
"redelegate" : "Redelegate",
- "reward" : "ขอรับ Reward",
+ "reward" : "เคลม Reward",
"estYield" : "ผลตอบแทนโดยประมาณ",
"totalStake" : "จำนวน Stake ทั้งหมด",
"commission" : "คอมมิชชัน",
@@ -5341,7 +5351,7 @@
"claimRewards" : {
"stepperHeader" : {
"validator" : "เลือก Reward ที่จะเก็บ",
- "method" : "ขอรับ Reward",
+ "method" : "เคลม Reward",
"summary" : "สรุป",
"selectDevice" : "เลือกอุปกรณ์",
"connectDevice" : "เชื่อมต่ออุปกรณ์",
@@ -5400,14 +5410,14 @@
"delegation" : {
"delegationEarn" : "Stake EGLD ของคุณเพื่อรักษาความปลอดภัยของเครือข่ายและรับส่วนแบ่ง Reward ของคุณ",
"info" : "Staking คืออะไรและทำงานอย่างไร?",
- "claimRewards" : "ขอรับ Reward",
- "claimAvailableRewards" : "ขอรับ {{amount}}",
+ "claimRewards" : "เคลม Reward",
+ "claimAvailableRewards" : "เคลม {{amount}}",
"header" : "Stake ของฉัน",
"Amount" : "จำนวน",
"noRewards" : "ไม่มี Reward",
"delegate" : "Restake",
"undelegate" : "Unstake",
- "reward" : "ขอรับ Reward",
+ "reward" : "เคลม Reward",
"commission" : "คอมมิชชัน",
"iDelegate" : "ฉัน Delegate",
"totalStake" : "Stake ทั้งหมด",
@@ -5480,7 +5490,7 @@
"claimRewards" : {
"stepperHeader" : {
"validator" : "เลือก Reward ที่จะเก็บ",
- "method" : "ขอรับ Reward",
+ "method" : "เคลม Reward",
"summary" : "สรุป",
"selectDevice" : "เลือกอุปกรณ์",
"connectDevice" : "เชื่อมต่ออุปกรณ์",
@@ -5491,11 +5501,11 @@
"method" : {
"youEarned" : "คุณได้รับ",
"byDelegationAssetsTo" : "โดยการ Stake สินทรัพย์ไปยัง",
- "claimRewards" : "ขอรับ Reward",
+ "claimRewards" : "เคลม Reward",
"reDelegateRewards" : "Stake Reward",
"claimRewardsInfo" : "ระบบจะรับให้ตอนนี้และเพิ่มไปยังยอดคงเหลือที่ใช้ได้ของคุณ",
"reDelegateRewardsInfo" : "ระบบจะรับให้ตอนนี้และ Stake ไปยังผู้ให้บริการ Staking คนเดียวกันโดยอัตโนมัติ",
- "compoundOrCashIn" : "Stake Reward หรือรับ Reward?",
+ "compoundOrCashIn" : "Stake Reward ต่อหรือเคลม Reward เลย?",
"claimRewardsTooltip" : "Reward จะถูกเพิ่มเข้าไปในยอดคงเหลือที่ใช้ได้",
"reDelegateRewardsTooltip" : "Reward จะถูกเพิ่มเข้าไปในจำนวนที่ Stake",
"cta" : "ดำเนินการต่อ"
@@ -5549,7 +5559,7 @@
"withdraw" : {
"stepperHeader" : {
"validator" : "เลือก Reward ที่จะเก็บ",
- "method" : "ขอรับ Reward",
+ "method" : "เคลม Reward",
"summary" : "สรุป",
"selectDevice" : "เลือกอุปกรณ์",
"connectDevice" : "เชื่อมต่ออุปกรณ์",
@@ -5594,7 +5604,7 @@
"delegationEarn" : "ตอนนี้คุณสามารถรับ Reward ได้โดยการ Freeze และการโหวต",
"howItWorks" : "วิธีใช้งานการโหวต",
"startEarning" : "รับ Reward",
- "title" : "ขอรับ Reward",
+ "title" : "เคลม Reward",
"header" : "โหวต ({{total}})",
"Amount" : "จำนวน",
"noRewards" : "ไม่มี Reward",
@@ -5606,7 +5616,7 @@
},
"rewards" : {
"title" : "Reward การโหวต",
- "button" : "ขอรับ"
+ "button" : "เคลม"
},
"manageVotes" : "จัดการการโหวต",
"remainingVotes" : {
diff --git a/apps/ledger-live-mobile/src/locales/tr/common.json b/apps/ledger-live-mobile/src/locales/tr/common.json
index bf30c94fb86d..e11969f41adf 100644
--- a/apps/ledger-live-mobile/src/locales/tr/common.json
+++ b/apps/ledger-live-mobile/src/locales/tr/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "Takas Live Uygulaması yüklenemedi"
+ },
+ "InvalidMemoMina" : {
+ "title" : "Memo metni 32 karakterden uzun olamaz"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "Bu işlem için {{fee}} tutarında bir hesap oluşturma ücreti alınacaktır"
+ },
+ "AmountTooSmall" : {
+ "title" : "Bu işlem için gerekli minimum tutar: {{amount}}"
}
},
"crash" : {
@@ -1396,7 +1405,7 @@
"desc" : "Ledger'la tamamen entegre olan Web 3.0'ı keşfedin"
},
"earn" : {
- "title" : "Kazanın",
+ "title" : "Kazan",
"desc" : "Kriptolarınızı stake ederek ve borç vererek artırın."
},
"mint" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "Gas limiti",
"id" : "Kimlik (ID)",
"autoClaimedRewards" : "Otomatik Alınan Ödüller",
- "stakedAmount" : "Stake edilen miktar"
+ "stakedAmount" : "Stake edilen miktar",
+ "accountCreationFee" : "Hesap Oluşturma Ücreti"
},
"multipleAddresses" : "Neden birden fazla adres var?",
"tokenName" : "Token Adı",
@@ -2626,6 +2636,10 @@
"description3Link" : "Bu entegrasyon, <1><0>{{team}}0>1> tarafından Ledger ile iş birliği yapılarak gerçekleştirilmiştir"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}}, şuraya taşınıyor: {{to}}. Daha fazla bilgi edinmek için bu <0>bağlantıyı0> takip edin veya yardıma ihtiyacınız varsa destek ekibiyle iletişime geçin.",
+ "contactSupport" : "Destek al"
+ },
"willBedeprecatedBanner" : {
"title" : "Verimliliği iyileştirmek için {{deprecatedDate}} tarihinden itibaren {{currencyName}} artık Ledger Live'da desteklenmeyecektir. Ancak Ledger donanım cüzdanlarında desteklenmeye devam edecektir. Bu konuda yardım almak isterseniz Ledger Müşteri Destek ekibiyle lütfen iletişime geçin.",
"contactSupport" : "Destek al"
@@ -2782,7 +2796,7 @@
"description" : "Bu hesapla {{actionName}} işlemi yapmak için elinizde {{currencyTicker}} olmalı."
}
},
- "earn" : "Kazanın",
+ "earn" : "Kazan",
"quickActions" : "Hızlı işlemler",
"referralProgram" : "Bizi arkadaşınıza önerin ve $20 değerinde Bitcoin kazanın",
"banner" : {
@@ -3534,12 +3548,12 @@
"apt_description" : "Aptos takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazı kullanın.",
"cosmos_title" : "Ledger Nano S™, Cosmos takasını desteklemez",
"cosmos_description" : "Cosmos takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazı kullanın.",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™, Osmosis takasını desteklemez",
+ "osmo_description" : "Osmosis takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazını kullanın.",
+ "dydx_title" : "Ledger Nano S™, dYdX takasını desteklemez",
+ "dydx_description" : "dYdX takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi başka bir uyumlu Ledger cihazını kullanın.",
+ "sui_title" : "Ledger Nano S™, Sui takasını desteklemez",
+ "sui_description" : "Sui takas etmek için Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ veya Ledger Stax™ gibi diğer herhangi bir uyumlu Ledger cihazını kullanın."
}
},
"lending" : {
diff --git a/apps/ledger-live-mobile/src/locales/zh/common.json b/apps/ledger-live-mobile/src/locales/zh/common.json
index 44cf27f9fb98..18315dec4f0a 100644
--- a/apps/ledger-live-mobile/src/locales/zh/common.json
+++ b/apps/ledger-live-mobile/src/locales/zh/common.json
@@ -1060,6 +1060,15 @@
},
"AppManifestNotFoundError" : {
"title" : "无法加载 Swap Live 应用程序"
+ },
+ "InvalidMemoMina" : {
+ "title" : "备忘标签文本不可超过 32 个字符"
+ },
+ "AccountCreationFeeWarning" : {
+ "title" : "此交易将产生 {{fee}} 的账户创建费"
+ },
+ "AmountTooSmall" : {
+ "title" : "此交易的最低数额要求为 {{amount}}"
}
},
"crash" : {
@@ -2593,7 +2602,8 @@
"gasLimit" : "矿工费限值",
"id" : "Id",
"autoClaimedRewards" : "自动领取的奖励",
- "stakedAmount" : "权益质押数额"
+ "stakedAmount" : "权益质押数额",
+ "accountCreationFee" : "账户创建费"
},
"multipleAddresses" : "为什么有多个地址?",
"tokenName" : "代币名称",
@@ -2626,6 +2636,10 @@
"description3Link" : "此集成由 <1><0>{{team}}0>1> 与 Ledger 协作实施"
}
},
+ "migrationBanner" : {
+ "title" : "{{from}} 正在迁移至 {{to}}。请点击此<0>链接0>了解详情,如需帮助,请联系客服。",
+ "contactSupport" : "联系客服"
+ },
"willBedeprecatedBanner" : {
"title" : "为了优化效率,自 {{deprecatedDate}} 起,Ledger Live 将不再支持 {{currencyName}}。但 Ledger 硬件钱包将继续支持该币种。如需这方面的帮助,请联系 Ledger 客服。",
"contactSupport" : "联系客服"
@@ -3534,12 +3548,12 @@
"apt_description" : "要互换 Aptos,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
"cosmos_title" : "Ledger Nano S™ 不支持互换 Cosmos",
"cosmos_description" : "要互换 Cosmos,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
- "osmo_title" : "Ledger Nano S™ does not support swapping Osmosis",
- "osmo_description" : "To swap Osmosis, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "dydx_title" : "Ledger Nano S™ does not support swapping dYdX",
- "dydx_description" : "To swap dYdX, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™.",
- "sui_title" : "Ledger Nano S™ does not support swapping Sui",
- "sui_description" : "To swap Sui, use any other compatible Ledger device, such as the Ledger Nano S Plus™, Ledger Nano X™, Ledger Flex™ or Ledger Stax™."
+ "osmo_title" : "Ledger Nano S™ 不支持互换 Osmosis",
+ "osmo_description" : "要互换 Osmosis,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
+ "dydx_title" : "Ledger Nano S™ 不支持互换 dYdX",
+ "dydx_description" : "要互换 dYdX,请使用其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。",
+ "sui_title" : "Ledger Nano S™ 不支持互换 Sui",
+ "sui_description" : "要互换 Sui,请使用任何其他兼容的 Ledger 设备,例如 Ledger Nano S Plus™、Ledger Nano X™、Ledger Flex™ 或 Ledger Stax™。"
}
},
"lending" : {
diff --git a/apps/ledger-live-mobile/src/screens/AddAccounts/01-SelectCrypto.tsx b/apps/ledger-live-mobile/src/screens/AddAccounts/01-SelectCrypto.tsx
index 395d257ced63..c1f0d4623f40 100644
--- a/apps/ledger-live-mobile/src/screens/AddAccounts/01-SelectCrypto.tsx
+++ b/apps/ledger-live-mobile/src/screens/AddAccounts/01-SelectCrypto.tsx
@@ -85,6 +85,7 @@ export default function AddAccountsSelectCrypto({ navigation, route }: Props) {
const velasEvm = useFeature("currencyVelasEvm");
const syscoin = useFeature("currencySyscoin");
const internetComputer = useFeature("currencyInternetComputer");
+ const mina = useFeature("currencyMina");
const telosEvm = useFeature("currencyTelosEvm");
const coreum = useFeature("currencyCoreum");
const polygonZkEvm = useFeature("currencyPolygonZkEvm");
@@ -172,6 +173,7 @@ export default function AddAccountsSelectCrypto({ navigation, route }: Props) {
zenrock,
sonic,
sonic_blaze: sonicBlaze,
+ mina,
}),
[
aptos,
@@ -230,6 +232,7 @@ export default function AddAccountsSelectCrypto({ navigation, route }: Props) {
zenrock,
sonic,
sonicBlaze,
+ mina,
],
);
diff --git a/apps/web-tools/live-common-setup.ts b/apps/web-tools/live-common-setup.ts
index d362e95ec863..621efcde833b 100644
--- a/apps/web-tools/live-common-setup.ts
+++ b/apps/web-tools/live-common-setup.ts
@@ -72,4 +72,5 @@ setSupportedCurrencies([
"mantra",
"xion",
"zenrock",
+ "mina",
]);
diff --git a/libs/coin-framework/src/currencies/__snapshots__/formatCurrencyUnit.test.ts.snap b/libs/coin-framework/src/currencies/__snapshots__/formatCurrencyUnit.test.ts.snap
index 78752de490a5..442d558141ab 100644
--- a/libs/coin-framework/src/currencies/__snapshots__/formatCurrencyUnit.test.ts.snap
+++ b/libs/coin-framework/src/currencies/__snapshots__/formatCurrencyUnit.test.ts.snap
@@ -184,6 +184,8 @@ exports[`formatCurrencyUnit with custom options with locale de-DE should correct
exports[`formatCurrencyUnit with custom options with locale de-DE should correctly format Metis unit (METIS) 1`] = `"0,012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale de-DE should correctly format Mina unit (MINA) 1`] = `"12.345.678,900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale de-DE should correctly format Monero unit (XMR) 1`] = `"12.345,678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale de-DE should correctly format Moonbeam unit (GLMR) 1`] = `"0,012345678900000000- -GLMR"`;
@@ -528,6 +530,8 @@ exports[`formatCurrencyUnit with custom options with locale en-US should correct
exports[`formatCurrencyUnit with custom options with locale en-US should correctly format Metis unit (METIS) 1`] = `"0.012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale en-US should correctly format Mina unit (MINA) 1`] = `"12,345,678.900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale en-US should correctly format Monero unit (XMR) 1`] = `"12,345.678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale en-US should correctly format Moonbeam unit (GLMR) 1`] = `"0.012345678900000000- -GLMR"`;
@@ -872,6 +876,8 @@ exports[`formatCurrencyUnit with custom options with locale es-ES should correct
exports[`formatCurrencyUnit with custom options with locale es-ES should correctly format Metis unit (METIS) 1`] = `"0,012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale es-ES should correctly format Mina unit (MINA) 1`] = `"12.345.678,900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale es-ES should correctly format Monero unit (XMR) 1`] = `"12.345,678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale es-ES should correctly format Moonbeam unit (GLMR) 1`] = `"0,012345678900000000- -GLMR"`;
@@ -1216,6 +1222,8 @@ exports[`formatCurrencyUnit with custom options with locale fr-FR should correct
exports[`formatCurrencyUnit with custom options with locale fr-FR should correctly format Metis unit (METIS) 1`] = `"0,012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale fr-FR should correctly format Mina unit (MINA) 1`] = `"12 345 678,900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale fr-FR should correctly format Monero unit (XMR) 1`] = `"12 345,678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale fr-FR should correctly format Moonbeam unit (GLMR) 1`] = `"0,012345678900000000- -GLMR"`;
@@ -1560,6 +1568,8 @@ exports[`formatCurrencyUnit with custom options with locale ja-JP should correct
exports[`formatCurrencyUnit with custom options with locale ja-JP should correctly format Metis unit (METIS) 1`] = `"0.012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale ja-JP should correctly format Mina unit (MINA) 1`] = `"12,345,678.900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale ja-JP should correctly format Monero unit (XMR) 1`] = `"12,345.678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale ja-JP should correctly format Moonbeam unit (GLMR) 1`] = `"0.012345678900000000- -GLMR"`;
@@ -1904,6 +1914,8 @@ exports[`formatCurrencyUnit with custom options with locale ko-KR should correct
exports[`formatCurrencyUnit with custom options with locale ko-KR should correctly format Metis unit (METIS) 1`] = `"0.012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale ko-KR should correctly format Mina unit (MINA) 1`] = `"12,345,678.900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale ko-KR should correctly format Monero unit (XMR) 1`] = `"12,345.678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale ko-KR should correctly format Moonbeam unit (GLMR) 1`] = `"0.012345678900000000- -GLMR"`;
@@ -2248,6 +2260,8 @@ exports[`formatCurrencyUnit with custom options with locale pt-BR should correct
exports[`formatCurrencyUnit with custom options with locale pt-BR should correctly format Metis unit (METIS) 1`] = `"0,012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale pt-BR should correctly format Mina unit (MINA) 1`] = `"12.345.678,900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale pt-BR should correctly format Monero unit (XMR) 1`] = `"12.345,678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale pt-BR should correctly format Moonbeam unit (GLMR) 1`] = `"0,012345678900000000- -GLMR"`;
@@ -2592,6 +2606,8 @@ exports[`formatCurrencyUnit with custom options with locale ru-RU should correct
exports[`formatCurrencyUnit with custom options with locale ru-RU should correctly format Metis unit (METIS) 1`] = `"0,012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale ru-RU should correctly format Mina unit (MINA) 1`] = `"12 345 678,900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale ru-RU should correctly format Monero unit (XMR) 1`] = `"12 345,678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale ru-RU should correctly format Moonbeam unit (GLMR) 1`] = `"0,012345678900000000- -GLMR"`;
@@ -2936,6 +2952,8 @@ exports[`formatCurrencyUnit with custom options with locale tr-TR should correct
exports[`formatCurrencyUnit with custom options with locale tr-TR should correctly format Metis unit (METIS) 1`] = `"0,012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale tr-TR should correctly format Mina unit (MINA) 1`] = `"12.345.678,900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale tr-TR should correctly format Monero unit (XMR) 1`] = `"12.345,678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale tr-TR should correctly format Moonbeam unit (GLMR) 1`] = `"0,012345678900000000- -GLMR"`;
@@ -3280,6 +3298,8 @@ exports[`formatCurrencyUnit with custom options with locale zh-CN should correct
exports[`formatCurrencyUnit with custom options with locale zh-CN should correctly format Metis unit (METIS) 1`] = `"0.012345678900000000- -METIS"`;
+exports[`formatCurrencyUnit with custom options with locale zh-CN should correctly format Mina unit (MINA) 1`] = `"12,345,678.900000000- -MINA"`;
+
exports[`formatCurrencyUnit with custom options with locale zh-CN should correctly format Monero unit (XMR) 1`] = `"12,345.678900000000- -XMR"`;
exports[`formatCurrencyUnit with custom options with locale zh-CN should correctly format Moonbeam unit (GLMR) 1`] = `"0.012345678900000000- -GLMR"`;
@@ -3624,6 +3644,8 @@ exports[`formatCurrencyUnit with default options should correctly format Mantra
exports[`formatCurrencyUnit with default options should correctly format Metis unit (METIS) 1`] = `"0.0123456"`;
+exports[`formatCurrencyUnit with default options should correctly format Mina unit (MINA) 1`] = `"12,345,678"`;
+
exports[`formatCurrencyUnit with default options should correctly format Monero unit (XMR) 1`] = `"12,345.6"`;
exports[`formatCurrencyUnit with default options should correctly format Moonbeam unit (GLMR) 1`] = `"0.0123456"`;
diff --git a/libs/coin-framework/src/derivation.ts b/libs/coin-framework/src/derivation.ts
index f737bd9cfe2e..8754e3da5128 100644
--- a/libs/coin-framework/src/derivation.ts
+++ b/libs/coin-framework/src/derivation.ts
@@ -171,6 +171,9 @@ const modes: Readonly> = Object.freeze({
internet_computer: {
overridesDerivation: "44'/223'/0'/0/",
},
+ minabip44h: {
+ overridesDerivation: "44'/12586'/'/0/0",
+ },
stacks_wallet: {
overridesDerivation: "44'/5757'/0'/0/",
startsAt: 1,
@@ -194,6 +197,7 @@ const legacyDerivations: Partial>
hedera: ["hederaBip44"],
filecoin: ["glifLegacy", "filecoinBIP44", "glif"],
internet_computer: ["internet_computer"],
+ mina: ["minabip44h"],
casper: ["casper_wallet"],
cardano: ["cardano"],
cardano_testnet: ["cardano"],
@@ -336,6 +340,7 @@ const disableBIP44: Record = {
icon_berlin_testnet: true,
vechain: true,
internet_computer: true,
+ mina: true,
casper: true,
filecoin: true,
ton: true,
@@ -355,6 +360,7 @@ const seedIdentifierPath: Record = {
cardano: ({ purpose, coinType }) => `${purpose}'/${coinType}'/0'/0/0`,
cardano_testnet: ({ purpose, coinType }) => `${purpose}'/${coinType}'/0'/0/0`,
internet_computer: ({ purpose, coinType }) => `${purpose}'/${coinType}'/0'/0/0`,
+ mina: ({ purpose, coinType }) => `${purpose}'/${coinType}'/0'/0/0`,
near: ({ purpose, coinType }) => `${purpose}'/${coinType}'/0'/0'/0'`,
vechain: ({ purpose, coinType }) => `${purpose}'/${coinType}'/0'/0/0`,
ton: ({ purpose, coinType }) => `${purpose}'/${coinType}'/0'/0'/0'/0'`,
diff --git a/libs/coin-modules/coin-mina/.eslintrc.js b/libs/coin-modules/coin-mina/.eslintrc.js
new file mode 100644
index 000000000000..8f6848a860b9
--- /dev/null
+++ b/libs/coin-modules/coin-mina/.eslintrc.js
@@ -0,0 +1,20 @@
+module.exports = {
+ env: {
+ browser: true,
+ es6: true,
+ },
+ overrides: [
+ {
+ files: ["src/**/*.test.{ts,tsx}"],
+ env: {
+ "jest/globals": true,
+ },
+ plugins: ["jest"],
+ },
+ ],
+ rules: {
+ "no-console": ["error", { allow: ["warn", "error"] }],
+ "@typescript-eslint/no-empty-function": "off",
+ "@typescript-eslint/no-explicit-any": "warn",
+ },
+};
diff --git a/libs/coin-modules/coin-mina/.unimportedrc.json b/libs/coin-modules/coin-mina/.unimportedrc.json
new file mode 100644
index 000000000000..e16ccd58c7e6
--- /dev/null
+++ b/libs/coin-modules/coin-mina/.unimportedrc.json
@@ -0,0 +1,64 @@
+{
+ "entry": [
+ "src/account.ts",
+ "src/bridge/js.ts",
+ "src/cli-transaction.ts",
+ "src/deviceTransactionConfig.ts",
+ "src/errors.ts",
+ "src/hw-getAddress.ts",
+ "src/serialization.ts",
+ "src/specs.ts",
+ "src/transaction.ts"
+ ],
+ "ignoreUnimported": [
+ "src/api/index.ts",
+ "src/api/rosetta/index.ts",
+ "src/api/rosetta/types.ts",
+ "src/api/rosetta/utils.ts",
+ "src/bridge/broadcast.ts",
+ "src/bridge/buildTransaction.ts",
+ "src/bridge/cli-transaction.ts",
+ "src/bridge/createTransaction.ts",
+ "src/bridge/deviceTransactionConfig.ts",
+ "src/bridge/errors.ts",
+ "src/bridge/estimateMaxSpendable.ts",
+ "src/bridge/getFeesForTransaction.ts",
+ "src/bridge/getTransactionStatus.ts",
+ "src/bridge/index.ts",
+ "src/bridge/prepareTransaction.ts",
+ "src/bridge/signOperation.ts",
+ "src/bridge/synchronisation.ts",
+ "src/bridge/transaction.ts",
+ "src/common-logic/index.ts",
+ "src/config.ts",
+ "src/consts.ts",
+ "src/signer/getAddress.ts",
+ "src/signer/index.ts",
+ "src/test/bot-specs.ts",
+ "src/test/bridgeDatasetTest.ts",
+ "src/test/index.ts",
+ "src/test/speculos-deviceActions.ts",
+ "src/test/testUtils.ts",
+ "src/types/common.ts",
+ "src/types/index.ts",
+ "src/types/signer.ts"
+ ],
+ "ignoreUnresolved": [],
+ "ignoreUnused": [
+ "@ledgerhq/coin-framework",
+ "@ledgerhq/cryptoassets",
+ "@ledgerhq/devices",
+ "@ledgerhq/errors",
+ "@ledgerhq/live-network",
+ "@ledgerhq/logs",
+ "@ledgerhq/types-cryptoassets",
+ "@ledgerhq/types-live",
+ "bignumber.js",
+ "bs58check",
+ "expect",
+ "invariant",
+ "lodash",
+ "mina-ledger-js",
+ "rxjs"
+ ]
+}
\ No newline at end of file
diff --git a/libs/coin-modules/coin-mina/CHANGELOG.md b/libs/coin-modules/coin-mina/CHANGELOG.md
new file mode 100644
index 000000000000..20c1b22d4a56
--- /dev/null
+++ b/libs/coin-modules/coin-mina/CHANGELOG.md
@@ -0,0 +1,118 @@
+# @ledgerhq/coin-near
+
+## 0.3.12
+
+### Patch Changes
+
+- Updated dependencies [[`7d5a724`](https://github.com/LedgerHQ/ledger-live/commit/7d5a724f40079a233b159b5231d69f318327e175), [`b3dfed5`](https://github.com/LedgerHQ/ledger-live/commit/b3dfed54bd8d54e62530cb2db92c3c108b43e0d7), [`7887ad9`](https://github.com/LedgerHQ/ledger-live/commit/7887ad9842e59f6fc567f118f06b3e12bdb9073b), [`5ae6d8f`](https://github.com/LedgerHQ/ledger-live/commit/5ae6d8fb9b868dc01724e84ede2708e7a717c3f2), [`21f5c44`](https://github.com/LedgerHQ/ledger-live/commit/21f5c4438bb542a3891f692f4274ee4c28aa76cd), [`a780777`](https://github.com/LedgerHQ/ledger-live/commit/a780777c13e08c1c3cd66ef5f6deac0fe928a894), [`1aa8ef4`](https://github.com/LedgerHQ/ledger-live/commit/1aa8ef404411c31f6ac4cf09fba453042db8b955), [`3c15515`](https://github.com/LedgerHQ/ledger-live/commit/3c155155f2d45fb85f8900e7e77c1b5ab1c7ad67), [`762dea1`](https://github.com/LedgerHQ/ledger-live/commit/762dea1c52ef0537961d058f7ba81fa399663ac1), [`fc4f83e`](https://github.com/LedgerHQ/ledger-live/commit/fc4f83e26d9f00b7c518f28157e8d9da55ce3685), [`13bea7c`](https://github.com/LedgerHQ/ledger-live/commit/13bea7ced4b8a7ad40fbc5205e3b58ed8a217982), [`d2f8b26`](https://github.com/LedgerHQ/ledger-live/commit/d2f8b26c99551cba902c07e9c544f3c84d74686c), [`dd1d17f`](https://github.com/LedgerHQ/ledger-live/commit/dd1d17fd3ce7ed42558204b2f93707fb9b1599de), [`5ca7923`](https://github.com/LedgerHQ/ledger-live/commit/5ca79234ccbe66ce22f998fe3ebd2cdec681499a), [`26b3a5d`](https://github.com/LedgerHQ/ledger-live/commit/26b3a5d7d6e11efc226403707d683f3d0098a1c1), [`9ada63a`](https://github.com/LedgerHQ/ledger-live/commit/9ada63a05b2d2518af09a9c07937cf94b5b2ea67), [`5848f9e`](https://github.com/LedgerHQ/ledger-live/commit/5848f9e247f169eb7a4aff322253937214b9efdd), [`c7f072f`](https://github.com/LedgerHQ/ledger-live/commit/c7f072f833a950e230137499d4908b792f6b615f), [`a8138f9`](https://github.com/LedgerHQ/ledger-live/commit/a8138f9ec0cff714d9745012eb91a09713ffbbd2), [`2331bae`](https://github.com/LedgerHQ/ledger-live/commit/2331bae7393f822aa64e5d0ab8f51622b6363b33), [`b72c52b`](https://github.com/LedgerHQ/ledger-live/commit/b72c52b3e4ebbb7aaf2142afbf6a9b9172e7ee04), [`ebb45be`](https://github.com/LedgerHQ/ledger-live/commit/ebb45be56c6b1fdb3c36a8c20a16b41600baa264), [`e1df8bc`](https://github.com/LedgerHQ/ledger-live/commit/e1df8bca348287e94970de90c51e98fa277c5364), [`53da330`](https://github.com/LedgerHQ/ledger-live/commit/53da3301aaceeb16e6b1f96b1ea44428fbeb4483), [`52d5703`](https://github.com/LedgerHQ/ledger-live/commit/52d57039bb015af2616670db480364a2e5fc9966), [`abb1bbb`](https://github.com/LedgerHQ/ledger-live/commit/abb1bbb09c52a3d08577ba622c6cb0f44aab36c1), [`ba5c49b`](https://github.com/LedgerHQ/ledger-live/commit/ba5c49b82af70a2e459720b9cb124546c406b88b)]:
+ - @ledgerhq/types-live@6.46.0
+ - @ledgerhq/coin-framework@0.12.0
+ - @ledgerhq/types-cryptoassets@7.11.0
+ - @ledgerhq/live-env@2.0.1
+ - @ledgerhq/errors@6.16.4
+ - @ledgerhq/devices@8.3.0
+ - @ledgerhq/live-network@1.2.1
+
+## 0.3.12-next.1
+
+### Patch Changes
+
+- Updated dependencies [[`762dea1`](https://github.com/LedgerHQ/ledger-live/commit/762dea1c52ef0537961d058f7ba81fa399663ac1)]:
+ - @ledgerhq/live-env@2.0.1-next.0
+ - @ledgerhq/coin-framework@0.12.0-next.1
+ - @ledgerhq/live-network@1.2.1-next.1
+
+## 0.3.12-next.0
+
+### Patch Changes
+
+- Updated dependencies [[`7d5a724`](https://github.com/LedgerHQ/ledger-live/commit/7d5a724f40079a233b159b5231d69f318327e175), [`b3dfed5`](https://github.com/LedgerHQ/ledger-live/commit/b3dfed54bd8d54e62530cb2db92c3c108b43e0d7), [`7887ad9`](https://github.com/LedgerHQ/ledger-live/commit/7887ad9842e59f6fc567f118f06b3e12bdb9073b), [`5ae6d8f`](https://github.com/LedgerHQ/ledger-live/commit/5ae6d8fb9b868dc01724e84ede2708e7a717c3f2), [`21f5c44`](https://github.com/LedgerHQ/ledger-live/commit/21f5c4438bb542a3891f692f4274ee4c28aa76cd), [`a780777`](https://github.com/LedgerHQ/ledger-live/commit/a780777c13e08c1c3cd66ef5f6deac0fe928a894), [`1aa8ef4`](https://github.com/LedgerHQ/ledger-live/commit/1aa8ef404411c31f6ac4cf09fba453042db8b955), [`3c15515`](https://github.com/LedgerHQ/ledger-live/commit/3c155155f2d45fb85f8900e7e77c1b5ab1c7ad67), [`fc4f83e`](https://github.com/LedgerHQ/ledger-live/commit/fc4f83e26d9f00b7c518f28157e8d9da55ce3685), [`13bea7c`](https://github.com/LedgerHQ/ledger-live/commit/13bea7ced4b8a7ad40fbc5205e3b58ed8a217982), [`d2f8b26`](https://github.com/LedgerHQ/ledger-live/commit/d2f8b26c99551cba902c07e9c544f3c84d74686c), [`dd1d17f`](https://github.com/LedgerHQ/ledger-live/commit/dd1d17fd3ce7ed42558204b2f93707fb9b1599de), [`5ca7923`](https://github.com/LedgerHQ/ledger-live/commit/5ca79234ccbe66ce22f998fe3ebd2cdec681499a), [`26b3a5d`](https://github.com/LedgerHQ/ledger-live/commit/26b3a5d7d6e11efc226403707d683f3d0098a1c1), [`9ada63a`](https://github.com/LedgerHQ/ledger-live/commit/9ada63a05b2d2518af09a9c07937cf94b5b2ea67), [`5848f9e`](https://github.com/LedgerHQ/ledger-live/commit/5848f9e247f169eb7a4aff322253937214b9efdd), [`c7f072f`](https://github.com/LedgerHQ/ledger-live/commit/c7f072f833a950e230137499d4908b792f6b615f), [`a8138f9`](https://github.com/LedgerHQ/ledger-live/commit/a8138f9ec0cff714d9745012eb91a09713ffbbd2), [`2331bae`](https://github.com/LedgerHQ/ledger-live/commit/2331bae7393f822aa64e5d0ab8f51622b6363b33), [`b72c52b`](https://github.com/LedgerHQ/ledger-live/commit/b72c52b3e4ebbb7aaf2142afbf6a9b9172e7ee04), [`ebb45be`](https://github.com/LedgerHQ/ledger-live/commit/ebb45be56c6b1fdb3c36a8c20a16b41600baa264), [`e1df8bc`](https://github.com/LedgerHQ/ledger-live/commit/e1df8bca348287e94970de90c51e98fa277c5364), [`53da330`](https://github.com/LedgerHQ/ledger-live/commit/53da3301aaceeb16e6b1f96b1ea44428fbeb4483), [`52d5703`](https://github.com/LedgerHQ/ledger-live/commit/52d57039bb015af2616670db480364a2e5fc9966), [`abb1bbb`](https://github.com/LedgerHQ/ledger-live/commit/abb1bbb09c52a3d08577ba622c6cb0f44aab36c1), [`ba5c49b`](https://github.com/LedgerHQ/ledger-live/commit/ba5c49b82af70a2e459720b9cb124546c406b88b)]:
+ - @ledgerhq/types-live@6.46.0-next.0
+ - @ledgerhq/coin-framework@0.12.0-next.0
+ - @ledgerhq/types-cryptoassets@7.11.0-next.0
+ - @ledgerhq/errors@6.16.4-next.0
+ - @ledgerhq/devices@8.3.0-next.0
+ - @ledgerhq/live-network@1.2.1-next.0
+
+## 0.3.11
+
+### Patch Changes
+
+- [#6262](https://github.com/LedgerHQ/ledger-live/pull/6262) [`0dd1546`](https://github.com/LedgerHQ/ledger-live/commit/0dd15467070cbf7fcbb9d9055a4535f6a25b2ad0) Thanks [@JesseKuntz](https://github.com/JesseKuntz)! - Updating the near-api-js library and fetching the NEAR staking positions from the node rather than the kitwallet API.
+
+- Updated dependencies [[`4744c31`](https://github.com/LedgerHQ/ledger-live/commit/4744c3136021f1f47ad1617f2c84f47ac0647370), [`0dd1546`](https://github.com/LedgerHQ/ledger-live/commit/0dd15467070cbf7fcbb9d9055a4535f6a25b2ad0), [`f456d69`](https://github.com/LedgerHQ/ledger-live/commit/f456d69a2f64b6a217d3c1d9c6a531f31c2817a8), [`6de15bc`](https://github.com/LedgerHQ/ledger-live/commit/6de15bc96e8b97a2a6815cf3fb1da874f7044b49), [`9c83695`](https://github.com/LedgerHQ/ledger-live/commit/9c8369580b91d82021d4ec28ad7a49dc4ba42e4f), [`2fd465e`](https://github.com/LedgerHQ/ledger-live/commit/2fd465ee730b11594d231503cfb940b984fa2f5a), [`7fb3eb2`](https://github.com/LedgerHQ/ledger-live/commit/7fb3eb266acdca143c94d2fce74329809ebfbb79), [`dfac39b`](https://github.com/LedgerHQ/ledger-live/commit/dfac39b2086f0475d1bc8065032bfe27cbf424f6), [`b34f5cd`](https://github.com/LedgerHQ/ledger-live/commit/b34f5cdda0b7bf34750d258cc8b1c91304516360), [`d870e90`](https://github.com/LedgerHQ/ledger-live/commit/d870e904a0dde5f8abf05f930f5f545828eccbc9), [`dfac39b`](https://github.com/LedgerHQ/ledger-live/commit/dfac39b2086f0475d1bc8065032bfe27cbf424f6)]:
+ - @ledgerhq/live-env@2.0.0
+ - @ledgerhq/errors@6.16.3
+ - @ledgerhq/types-live@6.45.0
+ - @ledgerhq/coin-framework@0.11.3
+ - @ledgerhq/live-network@1.2.0
+ - @ledgerhq/types-cryptoassets@7.10.0
+ - @ledgerhq/devices@8.2.2
+
+## 0.3.11-next.0
+
+### Patch Changes
+
+- [#6262](https://github.com/LedgerHQ/ledger-live/pull/6262) [`0dd1546`](https://github.com/LedgerHQ/ledger-live/commit/0dd15467070cbf7fcbb9d9055a4535f6a25b2ad0) Thanks [@JesseKuntz](https://github.com/JesseKuntz)! - Updating the near-api-js library and fetching the NEAR staking positions from the node rather than the kitwallet API.
+
+- Updated dependencies [[`4744c31`](https://github.com/LedgerHQ/ledger-live/commit/4744c3136021f1f47ad1617f2c84f47ac0647370), [`0dd1546`](https://github.com/LedgerHQ/ledger-live/commit/0dd15467070cbf7fcbb9d9055a4535f6a25b2ad0), [`f456d69`](https://github.com/LedgerHQ/ledger-live/commit/f456d69a2f64b6a217d3c1d9c6a531f31c2817a8), [`6de15bc`](https://github.com/LedgerHQ/ledger-live/commit/6de15bc96e8b97a2a6815cf3fb1da874f7044b49), [`9c83695`](https://github.com/LedgerHQ/ledger-live/commit/9c8369580b91d82021d4ec28ad7a49dc4ba42e4f), [`2fd465e`](https://github.com/LedgerHQ/ledger-live/commit/2fd465ee730b11594d231503cfb940b984fa2f5a), [`7fb3eb2`](https://github.com/LedgerHQ/ledger-live/commit/7fb3eb266acdca143c94d2fce74329809ebfbb79), [`dfac39b`](https://github.com/LedgerHQ/ledger-live/commit/dfac39b2086f0475d1bc8065032bfe27cbf424f6), [`b34f5cd`](https://github.com/LedgerHQ/ledger-live/commit/b34f5cdda0b7bf34750d258cc8b1c91304516360), [`d870e90`](https://github.com/LedgerHQ/ledger-live/commit/d870e904a0dde5f8abf05f930f5f545828eccbc9), [`dfac39b`](https://github.com/LedgerHQ/ledger-live/commit/dfac39b2086f0475d1bc8065032bfe27cbf424f6)]:
+ - @ledgerhq/live-env@2.0.0-next.0
+ - @ledgerhq/errors@6.16.3-next.0
+ - @ledgerhq/types-live@6.45.0-next.0
+ - @ledgerhq/coin-framework@0.11.3-next.0
+ - @ledgerhq/live-network@1.2.0-next.0
+ - @ledgerhq/types-cryptoassets@7.10.0-next.0
+ - @ledgerhq/devices@8.2.2-next.0
+
+## 0.3.10
+
+### Patch Changes
+
+- [#6279](https://github.com/LedgerHQ/ledger-live/pull/6279) [`3e28615`](https://github.com/LedgerHQ/ledger-live/commit/3e28615a8d5edbec3eff1e93207bf0e9d017666a) Thanks [@hedi-edelbloute](https://github.com/hedi-edelbloute)! - Updating the near-api-js library and fetching the NEAR staking positions from the node rather than the kitwallet API.
+
+- Updated dependencies [[`3e28615`](https://github.com/LedgerHQ/ledger-live/commit/3e28615a8d5edbec3eff1e93207bf0e9d017666a)]:
+ - @ledgerhq/live-env@1.0.1
+ - @ledgerhq/coin-framework@0.11.2
+ - @ledgerhq/live-network@1.1.13
+
+## 0.3.10-hotfix.1
+
+### Patch Changes
+
+- Updated dependencies []:
+ - @ledgerhq/coin-framework@0.11.2-hotfix.1
+
+## 0.3.10-hotfix.0
+
+### Patch Changes
+
+- [#6279](https://github.com/LedgerHQ/ledger-live/pull/6279) [`3e28615`](https://github.com/LedgerHQ/ledger-live/commit/3e28615a8d5edbec3eff1e93207bf0e9d017666a) Thanks [@hedi-edelbloute](https://github.com/hedi-edelbloute)! - Updating the near-api-js library and fetching the NEAR staking positions from the node rather than the kitwallet API.
+
+- Updated dependencies [[`3e28615`](https://github.com/LedgerHQ/ledger-live/commit/3e28615a8d5edbec3eff1e93207bf0e9d017666a)]:
+ - @ledgerhq/live-env@1.0.1-hotfix.0
+ - @ledgerhq/coin-framework@0.11.2-hotfix.0
+ - @ledgerhq/live-network@1.1.13-hotfix.0
+
+## 0.3.9
+
+### Patch Changes
+
+- Updated dependencies [[`c18a0cf`](https://github.com/LedgerHQ/ledger-live/commit/c18a0cfdce5d1e44faf8d8bd5659ebdae38533fa), [`ee88785`](https://github.com/LedgerHQ/ledger-live/commit/ee8878515671241ce1037362af5e8f7799b3673a), [`8d99b81`](https://github.com/LedgerHQ/ledger-live/commit/8d99b81feaf5e8d46e0c26f34bc70b709a7e3c14), [`43eea9e`](https://github.com/LedgerHQ/ledger-live/commit/43eea9e8076f2c9d5aeb0f8a3b0738e97b3152c8), [`1cb83b5`](https://github.com/LedgerHQ/ledger-live/commit/1cb83b5baa4603e22f391609438e349ca0ce9b0e), [`c217a6c`](https://github.com/LedgerHQ/ledger-live/commit/c217a6cfa59218278d25d2d987a06dfb33977cd9)]:
+ - @ledgerhq/live-env@1.0.0
+ - @ledgerhq/errors@6.16.2
+ - @ledgerhq/coin-framework@0.11.1
+ - @ledgerhq/types-live@6.44.1
+ - @ledgerhq/live-network@1.1.12
+ - @ledgerhq/devices@8.2.1
+
+## 0.3.9-next.0
+
+### Patch Changes
+
+- Updated dependencies [[`4744c31`](https://github.com/LedgerHQ/ledger-live/commit/4744c3136021f1f47ad1617f2c84f47ac0647370), [`f456d69`](https://github.com/LedgerHQ/ledger-live/commit/f456d69a2f64b6a217d3c1d9c6a531f31c2817a8), [`9c83695`](https://github.com/LedgerHQ/ledger-live/commit/9c8369580b91d82021d4ec28ad7a49dc4ba42e4f), [`2fd465e`](https://github.com/LedgerHQ/ledger-live/commit/2fd465ee730b11594d231503cfb940b984fa2f5a), [`b34f5cd`](https://github.com/LedgerHQ/ledger-live/commit/b34f5cdda0b7bf34750d258cc8b1c91304516360), [`d870e90`](https://github.com/LedgerHQ/ledger-live/commit/d870e904a0dde5f8abf05f930f5f545828eccbc9)]:
+ - @ledgerhq/live-env@1.0.0-next.0
+ - @ledgerhq/errors@6.16.2-next.0
+ - @ledgerhq/coin-framework@0.11.1-next.0
+ - @ledgerhq/types-live@6.44.1-next.0
+ - @ledgerhq/live-network@1.1.12-next.0
+ - @ledgerhq/devices@8.2.1-next.0
diff --git a/libs/coin-modules/coin-mina/jest.config.js b/libs/coin-modules/coin-mina/jest.config.js
new file mode 100644
index 000000000000..f46ddfd2b0a4
--- /dev/null
+++ b/libs/coin-modules/coin-mina/jest.config.js
@@ -0,0 +1,6 @@
+/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
+module.exports = {
+ preset: "ts-jest",
+ testEnvironment: "node",
+ testPathIgnorePatterns: ["lib/", "lib-es/"],
+};
diff --git a/libs/coin-modules/coin-mina/package.json b/libs/coin-modules/coin-mina/package.json
new file mode 100644
index 000000000000..01efbe112135
--- /dev/null
+++ b/libs/coin-modules/coin-mina/package.json
@@ -0,0 +1,123 @@
+{
+ "name": "@ledgerhq/coin-mina",
+ "version": "0.0.1",
+ "description": "Mina Coin integration",
+ "keywords": [
+ "Ledger",
+ "LedgerWallet",
+ "mina",
+ "Near",
+ "Hardware Wallet"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/LedgerHQ/ledger-live.git"
+ },
+ "bugs": {
+ "url": "https://github.com/LedgerHQ/ledger-live/issues"
+ },
+ "homepage": "https://github.com/LedgerHQ/ledger-live/tree/develop/libs/coin-modules/coin-mina",
+ "publishConfig": {
+ "access": "public"
+ },
+ "typesVersions": {
+ "*": {
+ "lib/*": [
+ "lib/*"
+ ],
+ "lib-es/*": [
+ "lib-es/*"
+ ],
+ "*": [
+ "lib/*"
+ ]
+ }
+ },
+ "exports": {
+ "./lib/*": "./lib/*.js",
+ "./lib-es/*": "./lib-es/*.js",
+ "./api": {
+ "require": "./lib/api/index.js",
+ "default": "./lib-es/api/index.js"
+ },
+ "./deviceTransactionConfig": {
+ "require": "./lib/bridge/deviceTransactionConfig.js",
+ "default": "./lib-es/bridge/deviceTransactionConfig.js"
+ },
+ "./logic": {
+ "require": "./lib/common-logic/index.js",
+ "default": "./lib-es/common-logic/index.js"
+ },
+ "./signer": {
+ "require": "./lib/signer/index.js",
+ "default": "./lib-es/signer/index.js"
+ },
+ "./specs": {
+ "require": "./lib/test/bot-specs.js",
+ "default": "./lib-es/test/bot-specs.js"
+ },
+ "./common-logic": {
+ "require": "./lib/common-logic/index.js",
+ "default": "./lib-es/common-logic/index.js"
+ },
+ "./bridge": {
+ "require": "./lib/bridge/index.js",
+ "default": "./lib-es/bridge/index.js"
+ },
+ "./transaction": {
+ "require": "./lib/bridge/transaction.js",
+ "default": "./lib-es/bridge/transaction.js"
+ },
+ "./types": {
+ "require": "./lib/types/index.js",
+ "default": "./lib-es/types/index.js"
+ },
+ "./*": {
+ "require": "./lib/*.js",
+ "default": "./lib-es/*.js"
+ },
+ ".": {
+ "require": "./lib/index.js",
+ "default": "./lib-es/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ledgerhq/coin-framework": "workspace:^",
+ "@ledgerhq/cryptoassets": "workspace:^",
+ "@ledgerhq/devices": "workspace:^",
+ "@ledgerhq/errors": "workspace:^",
+ "@ledgerhq/live-network": "workspace:^",
+ "@ledgerhq/logs": "workspace:^",
+ "@ledgerhq/types-cryptoassets": "workspace:^",
+ "@ledgerhq/types-live": "workspace:^",
+ "bignumber.js": "^9.1.2",
+ "bs58check": "^2.1.2",
+ "expect": "^27.4.6",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.21",
+ "mina-ledger-js": "^1.0.7",
+ "rxjs": "^7.8.1"
+ },
+ "devDependencies": {
+ "@types/invariant": "^2.2.2",
+ "@types/bs58check": "^2.1.2",
+ "expect": "^27.4.6",
+ "@types/jest": "^29.5.10",
+ "@types/lodash": "^4.14.191",
+ "jest": "^29.7.0",
+ "ts-jest": "^29.1.1"
+ },
+ "scripts": {
+ "clean": "rimraf lib lib-es",
+ "build": "tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es",
+ "prewatch": "pnpm build",
+ "watch": "tsc --watch",
+ "doc": "documentation readme src/** --section=API --pe ts --re ts --re d.ts",
+ "lint": "eslint ./src --no-error-on-unmatched-pattern --ext .ts,.tsx --cache",
+ "lint:fix": "pnpm lint --fix",
+ "test": "jest",
+ "unimported": "unimported"
+ }
+}
\ No newline at end of file
diff --git a/libs/coin-modules/coin-mina/src/api/index.ts b/libs/coin-modules/coin-mina/src/api/index.ts
new file mode 100644
index 000000000000..ae8b4f7fa7e7
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/api/index.ts
@@ -0,0 +1,120 @@
+import BigNumber from "bignumber.js";
+import { MinaAPIAccount, MinaSignedTransaction, Transaction } from "../types/common";
+import {
+ fetchAccountBalance,
+ fetchAccountTransactions,
+ fetchNetworkStatus,
+ fetchTransactionMetadata,
+ rosettaGetBlockInfo,
+ rosettaSubmitTransaction,
+} from "./rosetta";
+import { MINA_TOKEN_ID } from "../consts";
+import { isValidAddress } from "../common-logic";
+import { RosettaBlockInfoResponse, RosettaTransaction } from "./rosetta/types";
+import { log } from "@ledgerhq/logs";
+
+export const getAccount = async (address: string): Promise => {
+ const networkStatus = await fetchNetworkStatus();
+ let balance = new BigNumber(0);
+ let spendableBalance = new BigNumber(0);
+ try {
+ const resp = await fetchAccountBalance(address);
+ balance = new BigNumber(resp.balances[0].metadata.total_balance);
+ spendableBalance = new BigNumber(resp.balances[0].metadata.liquid_balance);
+ } catch (e) {
+ log("info", "[mina] getAccount error:", {
+ address,
+ error: e,
+ });
+ // fail is expected for when account has no balance and no transactions
+ /* empty */
+ }
+
+ return {
+ blockHeight: networkStatus.current_block_identifier.index,
+ balance,
+ spendableBalance,
+ };
+};
+
+export const getBlockInfo = async (blockHeight: number): Promise => {
+ const data = await rosettaGetBlockInfo(blockHeight);
+ return data;
+};
+
+export const getTransactions = async (
+ address: string,
+ offset: number = 0,
+): Promise => {
+ const txns = await fetchAccountTransactions(address, offset);
+ return txns.sort((a, b) => b.timestamp - a.timestamp);
+};
+
+export const broadcastTransaction = async (txn: MinaSignedTransaction): Promise => {
+ const { nonce, receiverAddress, amount, fee, memo, senderAddress } = txn.transaction;
+ const blob = {
+ signature: txn.signature,
+ payment: {
+ to: receiverAddress,
+ from: senderAddress,
+ fee: fee.toFixed(),
+ token: MINA_TOKEN_ID,
+ nonce: nonce.toFixed(),
+ memo: memo ?? null,
+ amount: amount.toFixed(),
+ valid_until: null,
+ },
+ stake_delegation: null,
+ };
+
+ const { data } = await rosettaSubmitTransaction(JSON.stringify(blob));
+
+ return data.transaction_identifier.hash;
+};
+
+export const getFees = async (
+ txn: Transaction,
+ address: string,
+): Promise<{
+ fee: BigNumber;
+ accountCreationFee: BigNumber;
+}> => {
+ if (!txn.amount || !txn.recipient || !isValidAddress(txn.recipient)) {
+ return { fee: txn.fees.fee, accountCreationFee: new BigNumber(0) };
+ }
+
+ const { data } = await fetchTransactionMetadata(
+ address,
+ txn.recipient,
+ txn.fees.fee.toNumber(),
+ txn.amount.toNumber(),
+ );
+
+ const accountCreationFee = data.metadata.account_creation_fee
+ ? new BigNumber(data.metadata.account_creation_fee)
+ : new BigNumber(0);
+
+ return {
+ fee: new BigNumber(data.suggested_fee[0].value),
+ accountCreationFee,
+ };
+};
+
+export const getNonce = async (txn: Transaction, address: string): Promise => {
+ if (!txn.recipient || !isValidAddress(txn.recipient)) {
+ return txn.nonce;
+ }
+
+ if (!txn.amount || !txn.fees) {
+ return txn.nonce;
+ }
+
+ const { data } = await fetchTransactionMetadata(
+ address,
+ txn.recipient,
+ txn.fees.fee.toNumber(),
+ txn.amount.toNumber(),
+ );
+
+ return parseInt(data.metadata.nonce);
+};
diff --git a/libs/coin-modules/coin-mina/src/api/rosetta/index.ts b/libs/coin-modules/coin-mina/src/api/rosetta/index.ts
new file mode 100644
index 000000000000..03014d98a8aa
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/api/rosetta/index.ts
@@ -0,0 +1,110 @@
+import network from "@ledgerhq/live-network";
+import {
+ FetchAccountBalanceResponse,
+ FetchAccountTransactionsResponse,
+ FetchNetworkStatusResponse,
+ RosettaBlockInfoResponse,
+ RosettaMetadataResponse,
+ RosettaPreprocessResponse,
+ RosettaSubmitResponse,
+ RosettaTransaction,
+} from "./types";
+import { getCoinConfig } from "../../config";
+import { addNetworkIdentifier, buildAccountIdentifier, makeTransferPayload } from "./utils";
+import { MAX_TRANSACTIONS_PER_PAGE } from "../../consts";
+import { LiveNetworkResponse } from "@ledgerhq/live-network/lib/network";
+
+const getRosettaUrl = (route: string): string => {
+ const currencyConfig = getCoinConfig();
+ return `${currencyConfig.infra.API_MINA_ROSETTA_NODE}${route || ""}`;
+};
+
+export const fetchNetworkStatus = async () => {
+ const { data } = await network({
+ method: "POST",
+ url: getRosettaUrl("/network/status"),
+ data: addNetworkIdentifier({}),
+ });
+
+ return data;
+};
+
+export const fetchAccountBalance = async (address: string) => {
+ const { data } = await network({
+ method: "POST",
+ url: getRosettaUrl("/account/balance"),
+ data: addNetworkIdentifier(buildAccountIdentifier(address)),
+ });
+
+ return data;
+};
+
+export const fetchAccountTransactions = async (
+ address: string,
+ offset: number = 0,
+): Promise => {
+ const transactions: RosettaTransaction[] = [];
+ let currentOffset: number | undefined = offset;
+ while (currentOffset !== undefined) {
+ const response: LiveNetworkResponse =
+ await network({
+ method: "POST",
+ url: getRosettaUrl("/search/transactions"),
+ data: {
+ ...addNetworkIdentifier(buildAccountIdentifier(address)),
+ offset: currentOffset,
+ limit: MAX_TRANSACTIONS_PER_PAGE,
+ include_timestamp: true,
+ },
+ });
+ const { data } = response;
+ transactions.push(...data.transactions);
+
+ currentOffset = data.next_offset;
+ }
+
+ return transactions;
+};
+
+export const rosettaGetBlockInfo = async (blockHeight: number) => {
+ const { data } = await network({
+ method: "POST",
+ url: getRosettaUrl("/block"),
+ data: addNetworkIdentifier({ block_identifier: { index: blockHeight } }),
+ });
+ return data;
+};
+
+const rosettaPreprocess = async (from: string, to: string, feeNano: number, valueNano: number) => {
+ const payload = makeTransferPayload(from, to, feeNano, valueNano);
+ const { data } = await network({
+ method: "POST",
+ url: getRosettaUrl("/construction/preprocess"),
+ data: addNetworkIdentifier(payload),
+ });
+
+ return data;
+};
+
+export const fetchTransactionMetadata = async (
+ srcAddress: string,
+ destAddress: string,
+ feeNano: number,
+ valueNano: number,
+) => {
+ const options = await rosettaPreprocess(srcAddress, destAddress, feeNano, valueNano);
+ const payload = makeTransferPayload(srcAddress, destAddress, feeNano, valueNano);
+ return await network({
+ method: "POST",
+ url: getRosettaUrl("/construction/metadata"),
+ data: addNetworkIdentifier({ ...payload, ...options }),
+ });
+};
+
+export const rosettaSubmitTransaction = async (blob: string) => {
+ return await network({
+ method: "POST",
+ url: getRosettaUrl("/construction/submit"),
+ data: addNetworkIdentifier({ signed_transaction: blob }),
+ });
+};
diff --git a/libs/coin-modules/coin-mina/src/api/rosetta/types.ts b/libs/coin-modules/coin-mina/src/api/rosetta/types.ts
new file mode 100644
index 000000000000..7f49efc3939d
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/api/rosetta/types.ts
@@ -0,0 +1,157 @@
+export type FetchNetworkStatusResponse = {
+ current_block_identifier: {
+ index: number;
+ hash: string;
+ };
+ current_block_timestamp: number;
+ genesis_block_identifier: {
+ index: number;
+ hash: string;
+ };
+ oldest_block_identifier: {
+ index: number;
+ hash: string;
+ };
+ sync_status: {
+ current_index: number;
+ stage: string;
+ synced: boolean;
+ };
+ peers: Array<{
+ peer_id: string;
+ }>;
+};
+
+export type FetchAccountBalanceResponse = {
+ block_identifier: {
+ index: number;
+ hash: string;
+ };
+ balances: Array<{
+ value: string;
+ currency: {
+ symbol: string;
+ decimals: number;
+ };
+ metadata: {
+ locked_balance: number;
+ liquid_balance: number;
+ total_balance: number;
+ };
+ }>;
+ metadata: {
+ created_via_historical_lookup: boolean;
+ nonce: string;
+ };
+};
+
+export type RosettaTransaction = {
+ block_identifier: {
+ index: number;
+ hash: string;
+ };
+ transaction: {
+ transaction_identifier: {
+ hash: string;
+ };
+ operations: Array<{
+ operation_identifier: {
+ index: number;
+ };
+ type:
+ | "fee_payment"
+ | "payment_source_dec"
+ | "payment_receiver_inc"
+ | "account_creation_fee_via_payment"
+ | "zkapp_fee_payer_dec"
+ | "delegate_change"
+ | "zkapp_balance_update";
+ status: "Success" | "Failed";
+ account: {
+ address: string;
+ metadata: {
+ token_id: string;
+ };
+ };
+ amount?: {
+ value: string;
+ currency: {
+ symbol: string;
+ decimals: number;
+ };
+ };
+ related_operations?: Array<{
+ index: number;
+ }>;
+ metadata?: {
+ delegate_change_target?: string;
+ };
+ }>;
+ related_transactions: Array;
+ metadata?: {
+ memo?: string;
+ nonce?: number;
+ };
+ };
+ timestamp: number;
+};
+
+export type FetchAccountTransactionsResponse = {
+ transactions: RosettaTransaction[];
+ total_count: number;
+ next_offset?: number;
+};
+
+export type RosettaPreprocessResponse = {
+ options: {
+ sender: string;
+ token_id: string;
+ receiver: string;
+ };
+};
+
+export type RosettaMetadataResponse = {
+ metadata: {
+ sender: string;
+ nonce: string;
+ token_id: string;
+ receiver: string;
+ account_creation_fee?: string;
+ };
+ suggested_fee: Array<{
+ value: string;
+ currency: {
+ symbol: string;
+ decimals: number;
+ };
+ metadata: {
+ minimum_fee: {
+ value: string;
+ currency: {
+ symbol: string;
+ decimals: number;
+ };
+ };
+ };
+ }>;
+};
+
+export type RosettaSubmitResponse = {
+ transaction_identifier: {
+ hash: string;
+ };
+};
+
+export type RosettaBlockInfoResponse = {
+ block: {
+ block_identifier: {
+ index: number;
+ hash: string;
+ };
+ parent_block_identifier: {
+ index: number;
+ hash: string;
+ };
+ timestamp: number;
+ };
+};
diff --git a/libs/coin-modules/coin-mina/src/api/rosetta/utils.ts b/libs/coin-modules/coin-mina/src/api/rosetta/utils.ts
new file mode 100644
index 000000000000..6358ff60c0f8
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/api/rosetta/utils.ts
@@ -0,0 +1,71 @@
+import {
+ MINA_DECIMALS,
+ MINA_SYMBOL,
+ MINA_TOKEN_ID,
+ MAINNET_NETWORK_IDENTIFIER,
+} from "../../consts";
+
+export const addNetworkIdentifier = (data: any) => {
+ return {
+ ...MAINNET_NETWORK_IDENTIFIER,
+ ...data,
+ };
+};
+
+export const buildAccountIdentifier = (address: string) => {
+ return {
+ account_identifier: {
+ address,
+ metadata: {
+ token_id: MINA_TOKEN_ID,
+ },
+ },
+ };
+};
+
+export function makeTransferPayload(from: string, to: string, feeNano: number, valueNano: number) {
+ function makeOperation(
+ idx: number,
+ relatedIdxs: number[],
+ opType: string,
+ addr: string,
+ value: number,
+ isPositive: boolean,
+ ) {
+ const relatedOps =
+ relatedIdxs.length == 0
+ ? {}
+ : {
+ related_operations: relatedIdxs.map(i => {
+ return { index: i };
+ }),
+ };
+
+ return {
+ operation_identifier: { index: idx },
+ relatedOps,
+ type: opType,
+ account: {
+ address: addr,
+ metadata: {
+ token_id: MINA_TOKEN_ID,
+ },
+ },
+ amount: {
+ value: (isPositive ? "" : "-") + value.toString(),
+ currency: {
+ symbol: MINA_SYMBOL,
+ decimals: MINA_DECIMALS,
+ },
+ },
+ };
+ }
+
+ return {
+ operations: [
+ makeOperation(0, [], "fee_payment", from, feeNano, false),
+ makeOperation(1, [], "payment_source_dec", from, valueNano, false),
+ makeOperation(2, [1], "payment_receiver_inc", to, valueNano, true),
+ ],
+ };
+}
diff --git a/libs/coin-modules/coin-mina/src/bridge/broadcast.ts b/libs/coin-modules/coin-mina/src/bridge/broadcast.ts
new file mode 100644
index 000000000000..c1c757818e20
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/broadcast.ts
@@ -0,0 +1,17 @@
+import type { Operation, SignedOperation } from "@ledgerhq/types-live";
+import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
+import { broadcastTransaction } from "../api";
+import { MinaSignedTransaction } from "../types/common";
+
+const broadcast = async ({
+ signedOperation: { signature, operation },
+}: {
+ signedOperation: SignedOperation;
+}): Promise => {
+ const signedPayload = JSON.parse(signature) as MinaSignedTransaction;
+ const hash = await broadcastTransaction(signedPayload);
+
+ return patchOperationWithHash(operation, hash);
+};
+
+export default broadcast;
diff --git a/libs/coin-modules/coin-mina/src/bridge/buildTransaction.ts b/libs/coin-modules/coin-mina/src/bridge/buildTransaction.ts
new file mode 100644
index 000000000000..1fb14f617564
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/buildTransaction.ts
@@ -0,0 +1,35 @@
+import { log } from "@ledgerhq/logs";
+import type { Account } from "@ledgerhq/types-live";
+import type { MinaUnsignedTransaction, Transaction } from "../types/common";
+import { MINA_MAINNET_NETWORK_ID, MINA_PAYMENT_TYPE_ID } from "../consts";
+import { getAccountNumFromPath } from "../common-logic";
+import invariant from "invariant";
+
+export const buildTransaction = async (
+ a: Account,
+ t: Transaction,
+): Promise => {
+ try {
+ // log("debug", "mina: build transaction", { account: a, transaction: t });
+ const accountNum = getAccountNumFromPath(a.freshAddressPath);
+ invariant(accountNum !== undefined, "mina: accountNum is required to build transaction");
+ return {
+ txType: MINA_PAYMENT_TYPE_ID,
+ senderAccount: accountNum,
+ senderAddress: a.freshAddress,
+ receiverAddress: t.recipient,
+ amount: t.amount.toNumber(),
+ fee: t.fees.fee.toNumber(),
+ nonce: t.nonce,
+ memo: t.memo ?? "",
+ networkId: MINA_MAINNET_NETWORK_ID,
+ };
+ } catch (e) {
+ log("error", "mina: error building transaction", {
+ error: e,
+ transaction: t,
+ account: a,
+ });
+ throw e;
+ }
+};
diff --git a/libs/coin-modules/coin-mina/src/bridge/cli-transaction.ts b/libs/coin-modules/coin-mina/src/bridge/cli-transaction.ts
new file mode 100644
index 000000000000..713b155a06cd
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/cli-transaction.ts
@@ -0,0 +1,43 @@
+import type { Account, AccountLike, AccountLikeArray } from "@ledgerhq/types-live";
+import invariant from "invariant";
+import flatMap from "lodash/flatMap";
+import type { Transaction } from "../types/common";
+
+const options = [
+ {
+ name: "memo",
+ type: String,
+ desc: "set a memo",
+ },
+];
+
+function inferAccounts(account: Account): AccountLikeArray {
+ invariant(account.currency.family === "mina", "mina family");
+ return [account];
+}
+
+function inferTransactions(
+ transactions: Array<{
+ account: AccountLike;
+ transaction: Transaction;
+ }>,
+ opts: Record,
+): Transaction[] {
+ return flatMap(transactions, ({ transaction }) => {
+ invariant(transaction.family === "mina", "mina family");
+
+ return {
+ ...transaction,
+ family: "mina",
+ memo: opts.memo,
+ };
+ });
+}
+
+export default function makeCliTools() {
+ return {
+ options,
+ inferAccounts,
+ inferTransactions,
+ };
+}
diff --git a/libs/coin-modules/coin-mina/src/bridge/createTransaction.ts b/libs/coin-modules/coin-mina/src/bridge/createTransaction.ts
new file mode 100644
index 000000000000..698a626c3b81
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/createTransaction.ts
@@ -0,0 +1,19 @@
+import BigNumber from "bignumber.js";
+import { MinaAccount, Transaction } from "../types/common";
+import { AccountBridge } from "@ledgerhq/types-live";
+
+export const createTransaction: AccountBridge<
+ Transaction,
+ MinaAccount
+>["createTransaction"] = () => ({
+ family: "mina",
+ amount: new BigNumber(0),
+ recipient: "",
+ useAllAmount: false,
+ fees: {
+ fee: new BigNumber(0),
+ accountCreationFee: new BigNumber(0),
+ },
+ memo: undefined,
+ nonce: 0,
+});
diff --git a/libs/coin-modules/coin-mina/src/bridge/deviceTransactionConfig.ts b/libs/coin-modules/coin-mina/src/bridge/deviceTransactionConfig.ts
new file mode 100644
index 000000000000..7795a5228d78
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/deviceTransactionConfig.ts
@@ -0,0 +1,15 @@
+import type { Account, AccountLike } from "@ledgerhq/types-live";
+import type { Transaction, TransactionStatus } from "../types/common";
+import type { CommonDeviceTransactionField as DeviceTransactionField } from "@ledgerhq/coin-framework/transaction/common";
+
+function getDeviceTransactionConfig(_input: {
+ account: AccountLike;
+ parentAccount: Account | null | undefined;
+ transaction: Transaction;
+ status: TransactionStatus;
+}): Array {
+ const fields: Array = [];
+ return fields;
+}
+
+export default getDeviceTransactionConfig;
diff --git a/libs/coin-modules/coin-mina/src/bridge/errors.ts b/libs/coin-modules/coin-mina/src/bridge/errors.ts
new file mode 100644
index 000000000000..2ee763aa1a59
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/errors.ts
@@ -0,0 +1,16 @@
+import { createCustomErrorClass } from "@ledgerhq/errors";
+
+/*
+ * When the memo is greater than 32 characters
+ */
+export const InvalidMemoMina = createCustomErrorClass("InvalidMemoMina");
+
+/*
+ * When the user sends less than the account creation fee of 1 MINA
+ */
+export const AccountCreationFeeWarning = createCustomErrorClass("AccountCreationFeeWarning");
+
+/*
+ * When the amount is less than the account creation fee of 1 MINA
+ */
+export const AmountTooSmall = createCustomErrorClass("AmountTooSmall");
diff --git a/libs/coin-modules/coin-mina/src/bridge/estimateMaxSpendable.ts b/libs/coin-modules/coin-mina/src/bridge/estimateMaxSpendable.ts
new file mode 100644
index 000000000000..f5b52bd180eb
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/estimateMaxSpendable.ts
@@ -0,0 +1,31 @@
+import { BigNumber } from "bignumber.js";
+import type { AccountBridge } from "@ledgerhq/types-live";
+import type { Transaction, MinaAccount } from "../types/common";
+import { getMainAccount } from "@ledgerhq/coin-framework/account/index";
+import { getMaxAmount } from "../common-logic";
+import { createTransaction } from "./createTransaction";
+import getEstimatedFees from "./getFeesForTransaction";
+
+const estimateMaxSpendable: AccountBridge<
+ Transaction,
+ MinaAccount
+>["estimateMaxSpendable"] = async ({ account, parentAccount, transaction }): Promise => {
+ const a = getMainAccount(account, parentAccount) as MinaAccount;
+ const t = {
+ ...createTransaction(account),
+ ...transaction,
+ amount: a.spendableBalance,
+ };
+
+ const { fee, accountCreationFee } = await getEstimatedFees(t, a.freshAddress);
+
+ const maxSpendable = getMaxAmount(a, t, fee.plus(accountCreationFee));
+
+ if (maxSpendable.lt(0)) {
+ return new BigNumber(0);
+ }
+
+ return maxSpendable;
+};
+
+export default estimateMaxSpendable;
diff --git a/libs/coin-modules/coin-mina/src/bridge/getFeesForTransaction.ts b/libs/coin-modules/coin-mina/src/bridge/getFeesForTransaction.ts
new file mode 100644
index 000000000000..53679042b75f
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/getFeesForTransaction.ts
@@ -0,0 +1,17 @@
+import { BigNumber } from "bignumber.js";
+import { getFees } from "../api";
+import { Transaction } from "../types/common";
+
+const getEstimatedFees = async (
+ transaction: Transaction,
+ address: string,
+): Promise<{
+ fee: BigNumber;
+ accountCreationFee: BigNumber;
+}> => {
+ const { fee, accountCreationFee } = await getFees(transaction, address);
+
+ return { fee, accountCreationFee };
+};
+
+export default getEstimatedFees;
diff --git a/libs/coin-modules/coin-mina/src/bridge/getTransactionStatus.ts b/libs/coin-modules/coin-mina/src/bridge/getTransactionStatus.ts
new file mode 100644
index 000000000000..19019584eb53
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/getTransactionStatus.ts
@@ -0,0 +1,85 @@
+import { BigNumber } from "bignumber.js";
+import {
+ NotEnoughBalance,
+ RecipientRequired,
+ InvalidAddress,
+ FeeNotLoaded,
+ AmountRequired,
+ InvalidAddressBecauseDestinationIsAlsoSource,
+} from "@ledgerhq/errors";
+import type { Transaction, MinaAccount, TransactionStatus, StatusErrorMap } from "../types/common";
+import { isValidAddress, isValidMemo, getMaxAmount, getTotalSpent } from "../common-logic";
+import { AccountBridge } from "@ledgerhq/types-live";
+import { AccountCreationFeeWarning, InvalidMemoMina, AmountTooSmall } from "./errors";
+import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies";
+
+const getTransactionStatus: AccountBridge<
+ Transaction,
+ MinaAccount,
+ TransactionStatus
+>["getTransactionStatus"] = async (a: MinaAccount, t: Transaction): Promise => {
+ const errors: StatusErrorMap = {};
+ const warnings: StatusErrorMap = {};
+ const useAllAmount = !!t.useAllAmount;
+
+ if (!t.fees) {
+ errors.fees = new FeeNotLoaded();
+ }
+
+ if (!t.recipient) {
+ errors.recipient = new RecipientRequired();
+ }
+
+ if (t.recipient && !isValidAddress(t.recipient)) {
+ errors.recipient = new InvalidAddress();
+ }
+
+ if (t.memo && !isValidMemo(t.memo)) {
+ errors.transaction = new InvalidMemoMina();
+ }
+
+ if (t.recipient === a.freshAddress) {
+ errors.recipient = new InvalidAddressBecauseDestinationIsAlsoSource();
+ }
+
+ if (t.fees?.accountCreationFee.gt(0)) {
+ const fee = formatCurrencyUnit(a.currency.units[0], t.fees.accountCreationFee, {
+ showCode: true,
+ disableRounding: true,
+ });
+ warnings.recipient = new AccountCreationFeeWarning(undefined, {
+ fee,
+ });
+
+ if (t.amount.lt(t.fees.accountCreationFee) && t.amount.gt(0)) {
+ errors.amount = new AmountTooSmall(undefined, {
+ amount: fee,
+ });
+ }
+ }
+
+ const estimatedFees = t.fees.fee || new BigNumber(0);
+
+ const maxAmountWithFees = getMaxAmount(a, t, estimatedFees);
+
+ const totalSpent = getTotalSpent(a, t, estimatedFees);
+ const amount = useAllAmount ? maxAmountWithFees : new BigNumber(t.amount);
+
+ if (amount.lte(0) && !t.useAllAmount) {
+ errors.amount = new AmountRequired();
+ }
+
+ if (amount.gt(maxAmountWithFees)) {
+ errors.amount = new NotEnoughBalance();
+ }
+
+ return Promise.resolve({
+ errors,
+ warnings,
+ estimatedFees,
+ amount,
+ totalSpent,
+ });
+};
+
+export default getTransactionStatus;
diff --git a/libs/coin-modules/coin-mina/src/bridge/index.ts b/libs/coin-modules/coin-mina/src/bridge/index.ts
new file mode 100644
index 000000000000..4d9f91109b1a
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/index.ts
@@ -0,0 +1,69 @@
+import type { AccountBridge, CurrencyBridge } from "@ledgerhq/types-live";
+import {
+ makeAccountBridgeReceive,
+ getSerializedAddressParameters,
+ updateTransaction,
+ makeScanAccounts,
+} from "@ledgerhq/coin-framework/bridge/jsHelpers";
+import { SignerContext } from "@ledgerhq/coin-framework/signer";
+import getAddressWrapper from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
+import type { Transaction } from "../types/common";
+import resolver from "../signer/getAddress";
+import { sync, getAccountShape } from "./synchronisation";
+import { MinaSigner } from "../types/signer";
+import { MinaCoinConfig, setCoinConfig } from "../config";
+import broadcast from "./broadcast";
+import { createTransaction } from "./createTransaction";
+import estimateMaxSpendable from "./estimateMaxSpendable";
+import getTransactionStatus from "./getTransactionStatus";
+import { prepareTransaction } from "./prepareTransaction";
+import buildSignOperation from "./signOperation";
+
+export function buildCurrencyBridge(signerContext: SignerContext): CurrencyBridge {
+ const getAddress = resolver(signerContext);
+
+ const scanAccounts = makeScanAccounts({
+ getAccountShape,
+ getAddressFn: getAddress,
+ });
+
+ return {
+ preload: async () => Promise.resolve({}),
+ hydrate: () => {},
+ scanAccounts,
+ };
+}
+
+export function buildAccountBridge(
+ signerContext: SignerContext,
+): AccountBridge {
+ const getAddress = resolver(signerContext);
+
+ const receive = makeAccountBridgeReceive(getAddressWrapper(getAddress));
+ const signOperation = buildSignOperation(signerContext);
+
+ return {
+ estimateMaxSpendable,
+ createTransaction,
+ updateTransaction,
+ getTransactionStatus,
+ prepareTransaction,
+ sync,
+ receive,
+ signOperation,
+ broadcast,
+ getSerializedAddressParameters,
+ };
+}
+
+export function createBridges(
+ signerContext: SignerContext,
+ coinConfig: MinaCoinConfig,
+) {
+ setCoinConfig(coinConfig);
+
+ return {
+ currencyBridge: buildCurrencyBridge(signerContext),
+ accountBridge: buildAccountBridge(signerContext),
+ };
+}
diff --git a/libs/coin-modules/coin-mina/src/bridge/prepareTransaction.ts b/libs/coin-modules/coin-mina/src/bridge/prepareTransaction.ts
new file mode 100644
index 000000000000..105116694bb9
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/prepareTransaction.ts
@@ -0,0 +1,24 @@
+import { updateTransaction } from "@ledgerhq/coin-framework/bridge/jsHelpers";
+import { Account, AccountBridge } from "@ledgerhq/types-live";
+import estimateMaxSpendable from "./estimateMaxSpendable";
+import getEstimatedFees from "./getFeesForTransaction";
+import { MinaAccount, Transaction } from "../types/common";
+import { getNonce } from "../api";
+
+export const prepareTransaction: AccountBridge<
+ Transaction,
+ MinaAccount
+>["prepareTransaction"] = async (a: Account, t: Transaction) => {
+ const { fee, accountCreationFee } = await getEstimatedFees(t, a.freshAddress);
+
+ const amount = t.useAllAmount
+ ? await estimateMaxSpendable({
+ account: a,
+ transaction: t,
+ })
+ : t.amount;
+
+ const nonce = await getNonce(t, a.freshAddress);
+
+ return updateTransaction(t, { fees: { fee, accountCreationFee }, amount, nonce });
+};
diff --git a/libs/coin-modules/coin-mina/src/bridge/signOperation.ts b/libs/coin-modules/coin-mina/src/bridge/signOperation.ts
new file mode 100644
index 000000000000..b419bdc47cc7
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/signOperation.ts
@@ -0,0 +1,112 @@
+import { BigNumber } from "bignumber.js";
+import { Observable } from "rxjs";
+import { FeeNotLoaded } from "@ledgerhq/errors";
+import type { MinaOperation, MinaSignedTransaction, Transaction } from "../types/common";
+import type {
+ Account,
+ DeviceId,
+ SignOperationEvent,
+ OperationType,
+ AccountBridge,
+} from "@ledgerhq/types-live";
+import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
+import { MinaSignature, MinaSigner } from "../types/signer";
+import { SignerContext } from "@ledgerhq/coin-framework/signer";
+import { buildTransaction } from "./buildTransaction";
+import { reEncodeRawSignature } from "../common-logic";
+import invariant from "invariant";
+
+const buildOptimisticOperation = (
+ account: Account,
+ transaction: Transaction,
+ fee: BigNumber,
+): MinaOperation => {
+ let value = new BigNumber(transaction.amount).plus(fee);
+
+ if (transaction.fees?.accountCreationFee.gt(0)) {
+ value = value.minus(transaction.fees.accountCreationFee);
+ }
+
+ const type: OperationType = "OUT";
+
+ const operation: MinaOperation = {
+ id: encodeOperationId(account.id, "", type),
+ hash: "",
+ type,
+ value,
+ fee,
+ blockHash: null,
+ blockHeight: null,
+ senders: [account.freshAddress],
+ recipients: [transaction.recipient].filter(Boolean),
+ accountId: account.id,
+ date: new Date(),
+ extra: {
+ memo: transaction.memo,
+ accountCreationFee: transaction.fees.accountCreationFee.toString(),
+ },
+ };
+
+ return operation;
+};
+
+/**
+ * Sign Transaction with Ledger hardware
+ */
+export const buildSignOperation =
+ (signerContext: SignerContext): AccountBridge["signOperation"] =>
+ ({
+ account,
+ transaction,
+ deviceId,
+ }: {
+ account: Account;
+ transaction: Transaction;
+ deviceId: DeviceId;
+ }): Observable =>
+ new Observable(o => {
+ async function main() {
+ o.next({ type: "device-signature-requested" });
+
+ if (!transaction.fees) {
+ throw new FeeNotLoaded();
+ }
+
+ const unsigned = await buildTransaction(account, transaction);
+
+ const { signature } = (await signerContext(deviceId, signer =>
+ signer.signTransaction(unsigned),
+ )) as MinaSignature;
+ invariant(signature, "signature should be defined if user accepted");
+ const encodedSignature = reEncodeRawSignature(signature);
+
+ const signedTransaction: MinaSignedTransaction = {
+ transaction: unsigned,
+ signature: encodedSignature,
+ };
+
+ o.next({ type: "device-signature-granted" });
+
+ const operation = buildOptimisticOperation(
+ account,
+ transaction,
+ transaction.fees.fee ?? new BigNumber(0),
+ );
+ const signedSerializedTx = JSON.stringify(signedTransaction);
+
+ o.next({
+ type: "signed",
+ signedOperation: {
+ operation,
+ signature: signedSerializedTx,
+ },
+ });
+ }
+
+ main().then(
+ () => o.complete(),
+ e => o.error(e),
+ );
+ });
+
+export default buildSignOperation;
diff --git a/libs/coin-modules/coin-mina/src/bridge/synchronisation.ts b/libs/coin-modules/coin-mina/src/bridge/synchronisation.ts
new file mode 100644
index 000000000000..806fc13c8ed6
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/synchronisation.ts
@@ -0,0 +1,185 @@
+import type { Account } from "@ledgerhq/types-live";
+import { encodeAccountId } from "@ledgerhq/coin-framework/account/accountId";
+import type { GetAccountShape } from "@ledgerhq/coin-framework/bridge/jsHelpers";
+import { makeSync, mergeOps } from "@ledgerhq/coin-framework/bridge/jsHelpers";
+import { getAccount, getBlockInfo, getTransactions } from "../api";
+import { MinaAccount, MinaOperation } from "../types/common";
+import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
+import BigNumber from "bignumber.js";
+import { log } from "@ledgerhq/logs";
+import invariant from "invariant";
+import { RosettaTransaction } from "../api/rosetta/types";
+
+export const mapRosettaTxnToOperation = async (
+ accountId: string,
+ address: string,
+ txn: RosettaTransaction,
+): Promise => {
+ try {
+ const hash = txn.transaction.transaction_identifier.hash;
+ const blockHeight = txn.block_identifier.index;
+ const blockHash = txn.block_identifier.hash;
+ const date = new Date(txn.timestamp ?? (await getBlockInfo(blockHeight)).block.timestamp);
+ const memo = txn.transaction.metadata?.memo || "";
+
+ let value = new BigNumber(0);
+ let fee = new BigNumber(0);
+ let accountCreationFee = new BigNumber(0);
+
+ let fromAccount: string = "";
+ let toAccount: string = "";
+ let isSending = false;
+ let failed = false;
+ let redelegateTransaction = false;
+
+ for (const op of txn.transaction.operations) {
+ failed = op.status === "Failed";
+ const opValue = failed ? new BigNumber(0) : new BigNumber(op.amount?.value ?? 0);
+ switch (op.type) {
+ case "fee_payment": {
+ fee = fee.plus(opValue.times(-1));
+ continue;
+ }
+ case "payment_receiver_inc": {
+ toAccount = op.account.address;
+ value = value.plus(opValue);
+ continue;
+ }
+ case "payment_source_dec": {
+ fromAccount = op.account.address;
+ if (fromAccount === address) {
+ isSending = true;
+ }
+ continue;
+ }
+ case "zkapp_fee_payer_dec": {
+ fromAccount = op.account.address;
+ continue;
+ }
+ case "zkapp_balance_update": {
+ toAccount = op.account.address;
+ value = value.plus(opValue);
+ continue;
+ }
+ case "delegate_change": {
+ fromAccount = op.account.address;
+ invariant(op.metadata?.delegate_change_target, "mina: missing delegate change target");
+ toAccount = op.metadata?.delegate_change_target;
+ redelegateTransaction = true;
+ continue;
+ }
+ case "account_creation_fee_via_payment": {
+ accountCreationFee = opValue.times(-1);
+ continue;
+ }
+ }
+ }
+
+ invariant(fromAccount, "mina: missing fromAccount");
+ invariant(toAccount, "mina: missing toAccount");
+
+ const op: MinaOperation = {
+ id: "",
+ type: "NONE",
+ hash,
+ value,
+ fee,
+ blockHeight,
+ hasFailed: failed,
+ blockHash,
+ accountId,
+ senders: [fromAccount],
+ recipients: [toAccount],
+ date,
+ extra: {
+ memo,
+ accountCreationFee: accountCreationFee.toString(),
+ },
+ };
+
+ const ops: MinaOperation[] = [];
+ if (isSending) {
+ const type = "OUT";
+ ops.push({
+ ...op,
+ value: value.minus(accountCreationFee).plus(fee),
+ type,
+ id: encodeOperationId(accountId, hash, type),
+ });
+ } else if (redelegateTransaction) {
+ // delegate change
+ const type = "REDELEGATE";
+ ops.push({
+ ...op,
+ type,
+ id: encodeOperationId(accountId, hash, type),
+ });
+ } else {
+ const type = "IN";
+ ops.push({
+ ...op,
+ value: value.minus(accountCreationFee),
+ type,
+ id: encodeOperationId(accountId, hash, type),
+ });
+ }
+
+ return ops;
+ } catch (e) {
+ log("error", "mina: failed to convert txn to operation", {
+ error: e,
+ transaction: txn,
+ });
+ return [];
+ }
+};
+
+export const getAccountShape: GetAccountShape = async info => {
+ const { address, initialAccount, currency, derivationMode } = info;
+ const oldOperations = initialAccount?.operations || [];
+
+ const accountId = encodeAccountId({
+ type: "js",
+ version: "2",
+ currencyId: currency.id,
+ xpubOrAddress: address,
+ derivationMode,
+ });
+
+ const { blockHeight, balance, spendableBalance } = await getAccount(address);
+
+ const rosettaTxns = await getTransactions(address, initialAccount?.operations.length);
+ const newOperations = await Promise.all(
+ rosettaTxns.flatMap(t => mapRosettaTxnToOperation(accountId, address, t)),
+ );
+
+ const operations = mergeOps(oldOperations, newOperations.flat());
+
+ const shape: Partial = {
+ id: accountId,
+ balance,
+ spendableBalance,
+ operationsCount: operations.length,
+ blockHeight,
+ };
+
+ return { ...shape, operations };
+};
+
+const postSync = (initial: Account, synced: Account): Account => {
+ const pendingOperations = initial.pendingOperations || [];
+
+ if (pendingOperations.length === 0) {
+ return synced;
+ }
+
+ const { operations } = synced;
+
+ synced.pendingOperations = pendingOperations.filter(
+ po => !operations.some(o => o.hash === po.hash),
+ );
+
+ return synced;
+};
+
+export const sync = makeSync({ getAccountShape, postSync });
diff --git a/libs/coin-modules/coin-mina/src/bridge/transaction.ts b/libs/coin-modules/coin-mina/src/bridge/transaction.ts
new file mode 100644
index 000000000000..444a7568fd9f
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/bridge/transaction.ts
@@ -0,0 +1,69 @@
+import type { Transaction, TransactionRaw } from "../types/common";
+import { formatTransactionStatus } from "@ledgerhq/coin-framework/formatters";
+import {
+ fromTransactionCommonRaw,
+ fromTransactionStatusRawCommon as fromTransactionStatusRaw,
+ toTransactionCommonRaw,
+ toTransactionStatusRawCommon as toTransactionStatusRaw,
+} from "@ledgerhq/coin-framework/serialization";
+import type { Account } from "@ledgerhq/types-live";
+import { getAccountCurrency } from "@ledgerhq/coin-framework/account/index";
+import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/index";
+import BigNumber from "bignumber.js";
+
+export const formatTransaction = (
+ { recipient, useAllAmount, amount }: Transaction,
+ account: Account,
+): string => `
+SEND ${
+ useAllAmount
+ ? "MAX"
+ : amount.isZero()
+ ? ""
+ : " " +
+ formatCurrencyUnit(getAccountCurrency(account).units[0], amount, {
+ showCode: true,
+ disableRounding: true,
+ })
+}
+TO ${recipient}`;
+
+export const fromTransactionRaw = (tr: TransactionRaw): Transaction => {
+ const common = fromTransactionCommonRaw(tr);
+ return {
+ ...common,
+ family: tr.family,
+ fees: {
+ fee: new BigNumber(tr.fees.fee),
+ accountCreationFee: new BigNumber(tr.fees.accountCreationFee),
+ },
+ amount: new BigNumber(tr.amount),
+ memo: tr.memo,
+ nonce: tr.nonce,
+ };
+};
+
+const toTransactionRaw = (t: Transaction): TransactionRaw => {
+ const common = toTransactionCommonRaw(t);
+
+ return {
+ ...common,
+ family: t.family,
+ amount: t.amount.toFixed(),
+ fees: {
+ fee: t.fees.fee.toString(),
+ accountCreationFee: t.fees.accountCreationFee.toString(),
+ },
+ memo: t.memo ?? undefined,
+ nonce: t.nonce,
+ };
+};
+
+export default {
+ formatTransaction,
+ fromTransactionRaw,
+ toTransactionRaw,
+ fromTransactionStatusRaw,
+ toTransactionStatusRaw,
+ formatTransactionStatus,
+};
diff --git a/libs/coin-modules/coin-mina/src/common-logic/index.ts b/libs/coin-modules/coin-mina/src/common-logic/index.ts
new file mode 100644
index 000000000000..98330a7b7b7c
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/common-logic/index.ts
@@ -0,0 +1,97 @@
+import { BigNumber } from "bignumber.js";
+import { Transaction, MinaAccount } from "../types/common";
+import { CoinType } from "@ledgerhq/types-cryptoassets";
+import { MAX_MEMO_LENGTH, MINA_DECODED_ADDRESS_LENGTH } from "../consts";
+import bs58check from "bs58check";
+
+/*
+ * Validate a Mina address.
+ */
+export function isValidAddress(address: string) {
+ try {
+ if (!address.toLowerCase().startsWith("b62")) {
+ return false;
+ }
+ const decodedAddress = Buffer.from(bs58check.decode(address)).toString("hex");
+ return !!decodedAddress && decodedAddress.length === MINA_DECODED_ADDRESS_LENGTH;
+ } catch (ex) {
+ return false;
+ }
+}
+
+export const isValidMemo = (memo: string): boolean => {
+ return memo.length <= MAX_MEMO_LENGTH;
+};
+
+// Get the account number from the path
+export const getAccountNumFromPath = (path: string): number | undefined => {
+ const parts = path.split("'/");
+
+ if (parts.length === 3) {
+ return;
+ }
+
+ if (parts[1] !== `${CoinType.MINA}`) {
+ return;
+ }
+
+ try {
+ const acc = parseInt(parts[2], 10);
+ if (acc >= 0) {
+ return acc;
+ }
+ return;
+ } catch (e) {
+ return;
+ }
+};
+
+/*
+ * Get the max amount that can be spent, taking into account tx type and pending operations.
+ */
+export const getMaxAmount = (a: MinaAccount, _t: Transaction, fees?: BigNumber): BigNumber => {
+ let maxAmount;
+
+ let pendingDefaultAmount = new BigNumber(0);
+
+ a.pendingOperations.forEach(({ value }) => {
+ pendingDefaultAmount = pendingDefaultAmount.plus(value);
+ });
+
+ maxAmount = a.spendableBalance.minus(pendingDefaultAmount);
+ if (fees) {
+ maxAmount = maxAmount.minus(fees);
+ }
+ if (maxAmount === undefined || maxAmount.lt(0)) {
+ return new BigNumber(0);
+ }
+
+ return maxAmount;
+};
+
+export const getTotalSpent = (a: MinaAccount, t: Transaction, fees: BigNumber): BigNumber => {
+ if (t.useAllAmount) {
+ return a.spendableBalance;
+ }
+
+ return new BigNumber(t.amount).plus(fees);
+};
+
+// reEncodeRawSignature takes a raw signature in the form of a 128-character hex string and returns a re-encoded version of it.
+export function reEncodeRawSignature(rawSignature: string) {
+ function shuffleBytes(hex: string) {
+ const bytes = hex.match(/.{2}/g);
+ if (!bytes) {
+ throw "Invalid hex input";
+ }
+ bytes.reverse();
+ return bytes.join("");
+ }
+
+ if (rawSignature.length !== 128) {
+ throw "Invalid raw signature input";
+ }
+ const field = rawSignature.substring(0, 64);
+ const scalar = rawSignature.substring(64);
+ return shuffleBytes(field) + shuffleBytes(scalar);
+}
diff --git a/libs/coin-modules/coin-mina/src/config.ts b/libs/coin-modules/coin-mina/src/config.ts
new file mode 100644
index 000000000000..bbaeb2865a99
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/config.ts
@@ -0,0 +1,21 @@
+import { CurrencyConfig } from "@ledgerhq/coin-framework/config";
+
+export type MinaCoinConfig = () => CurrencyConfig & {
+ infra: {
+ API_MINA_ROSETTA_NODE: string;
+ };
+};
+
+let coinConfig: MinaCoinConfig | undefined;
+
+export const setCoinConfig = (config: MinaCoinConfig): void => {
+ coinConfig = config;
+};
+
+export const getCoinConfig = (): ReturnType => {
+ if (!coinConfig?.()) {
+ throw new Error("Mina module config not set");
+ }
+
+ return coinConfig();
+};
diff --git a/libs/coin-modules/coin-mina/src/consts.ts b/libs/coin-modules/coin-mina/src/consts.ts
new file mode 100644
index 000000000000..d65c894e92e6
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/consts.ts
@@ -0,0 +1,18 @@
+export const MAINNET_NETWORK_IDENTIFIER = {
+ network_identifier: {
+ blockchain: "mina",
+ network: "mainnet",
+ },
+};
+
+export const MINA_MAINNET_NETWORK_ID = 1;
+export const MINA_PAYMENT_TYPE_ID = 0;
+export const MINA_TOKEN_ID = "wSHV2S4qX9jFsLjQo8r1BsMLH2ZRKsZx6EJd1sbozGPieEC4Jf";
+export const MINA_DECIMALS = 9;
+export const MINA_SYMBOL = "MINA";
+export const MINA_CURVE_TYPE = "pallas";
+
+export const MAX_MEMO_LENGTH = 32;
+export const MINA_DECODED_ADDRESS_LENGTH = 72;
+
+export const MAX_TRANSACTIONS_PER_PAGE = 100;
diff --git a/libs/coin-modules/coin-mina/src/signer/getAddress.ts b/libs/coin-modules/coin-mina/src/signer/getAddress.ts
new file mode 100644
index 000000000000..85481efe41e2
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/signer/getAddress.ts
@@ -0,0 +1,26 @@
+import { GetAddressFn } from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
+import { SignerContext } from "@ledgerhq/coin-framework/signer";
+import { GetAddressOptions } from "@ledgerhq/coin-framework/derivation";
+import { GetAddressResponse, MinaSigner } from "../types/signer";
+import { getAccountNumFromPath } from "../common-logic";
+import invariant from "invariant";
+import { log } from "@ledgerhq/logs";
+
+const resolver = (signerContext: SignerContext): GetAddressFn => {
+ return async (deviceId: string, { path, verify }: GetAddressOptions) => {
+ const account = getAccountNumFromPath(path);
+ log("debug", "getAddress, extracted account for path: ", { account, path, verify });
+ invariant(account !== undefined, "Invalid account path, supported: 44'/12586'/'/0/0");
+ const r = (await signerContext(deviceId, signer =>
+ signer.getAddress(account, verify || false),
+ )) as GetAddressResponse;
+ invariant(r.publicKey, "[mina] getAddress: expected publicKey to be defined");
+ return {
+ address: r.publicKey,
+ publicKey: r.publicKey,
+ path,
+ };
+ };
+};
+
+export default resolver;
diff --git a/libs/coin-modules/coin-mina/src/signer/index.ts b/libs/coin-modules/coin-mina/src/signer/index.ts
new file mode 100644
index 000000000000..9190aab92526
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/signer/index.ts
@@ -0,0 +1,3 @@
+import resolver from "./getAddress";
+
+export default resolver;
diff --git a/libs/coin-modules/coin-mina/src/test/api.unit.test.ts b/libs/coin-modules/coin-mina/src/test/api.unit.test.ts
new file mode 100644
index 000000000000..85334e8580e6
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/api.unit.test.ts
@@ -0,0 +1,45 @@
+import { setConfig } from "./testUtils";
+setConfig();
+import { getAccount, getTransactions } from "../api";
+
+test("get balance for an account", async () => {
+ const invalidAddress = [
+ "B62qkdFWJSW8zaTBZjTVtmeU3rVxyUkNxPhKKW8T2JBtpj5XfdywLJM",
+ "novalidaddress",
+ ];
+ const validAddress = ["B62qkdFWJSW8zaTBZjTVtmeU3rVxyUkNxPhKKW8T2JBtpj5XfdywLSM"];
+
+ for (const address of invalidAddress) {
+ await expect(getAccount(address)).toBeDefined();
+ }
+
+ for (const address of validAddress) {
+ const account = await getAccount(address);
+ expect(account).toBeDefined();
+ expect(account.balance.toNumber()).toBeGreaterThan(0);
+ }
+});
+
+test(
+ "get transaction",
+ async () => {
+ const invalidAddress = [
+ "B62qkdFWJSW8zaTBZjTVtmeU3rVxyUkNxPhKKW8T2JBtpj5XfdywLJM",
+ "novalidaddress",
+ ];
+ const validAddress = ["B62qkdFWJSW8zaTBZjTVtmeU3rVxyUkNxPhKKW8T2JBtpj5XfdywLSM"];
+
+ for (const address of invalidAddress) {
+ const transactions = await getTransactions(address);
+ expect(transactions).toBeDefined();
+ expect(transactions).toHaveLength(0);
+ }
+
+ for (const address of validAddress) {
+ const transactions = await getTransactions(address);
+ expect(transactions).toBeDefined();
+ expect(transactions.length).toBeGreaterThan(0);
+ }
+ },
+ 60 * 1000,
+);
diff --git a/libs/coin-modules/coin-mina/src/test/bot-specs.ts b/libs/coin-modules/coin-mina/src/test/bot-specs.ts
new file mode 100644
index 000000000000..ca76b2701c60
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/bot-specs.ts
@@ -0,0 +1,124 @@
+import invariant from "invariant";
+import { DeviceModelId } from "@ledgerhq/devices";
+import BigNumber from "bignumber.js";
+import expect from "expect";
+
+import type { Transaction } from "../types/common";
+import { genericTestDestination, botTest, pickSiblings } from "@ledgerhq/coin-framework/bot/specs";
+import type { AppSpec } from "@ledgerhq/coin-framework/bot/types";
+import { acceptTransaction } from "./speculos-deviceActions";
+import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/index";
+import { getRandomTransferID } from "./testUtils";
+
+const maxAccount = 6;
+// 0.1 MINA
+const MIN_SAFE = new BigNumber(1 * 10 ** 8);
+
+const minaSpecs: AppSpec = {
+ name: "Mina",
+ currency: getCryptoCurrencyById("mina"),
+ appQuery: {
+ model: DeviceModelId.nanoS,
+ appName: "Mina",
+ },
+ genericDeviceAction: acceptTransaction,
+ testTimeout: 15 * 60 * 1000,
+ minViableAmount: MIN_SAFE,
+ transactionCheck: ({ maxSpendable }) => {
+ invariant(maxSpendable.gt(MIN_SAFE), "balance is too low");
+ },
+ mutations: [
+ {
+ name: "Send ~50% to another account",
+ maxRun: 1,
+ testDestination: genericTestDestination,
+ feature: "send",
+ transaction: ({ account, siblings, bridge, maxSpendable }) => {
+ invariant(maxSpendable.gt(MIN_SAFE), "balance is too low");
+ const sibling = pickSiblings(siblings, maxAccount);
+ const recipient = sibling.freshAddress;
+ const amount = maxSpendable.div(2).integerValue();
+
+ const transaction = bridge.createTransaction(account);
+ const updates: Array> = [
+ {
+ recipient,
+ },
+ { amount },
+ ];
+
+ if (Math.random() < 0.5) {
+ updates.push({
+ memo: getRandomTransferID(),
+ });
+ }
+
+ return {
+ transaction,
+ updates,
+ };
+ },
+
+ test: ({ accountBeforeTransaction, operation, account, transaction }) => {
+ botTest("account spendable balance decreased with operation", () =>
+ expect(account.spendableBalance).toEqual(
+ accountBeforeTransaction.spendableBalance
+ .minus(operation.value)
+ .minus((operation.extra as any).accountCreationFee),
+ ),
+ );
+
+ if (transaction.memo) {
+ botTest("operation memo", () =>
+ expect(operation.extra).toMatchObject({
+ memo: transaction.memo,
+ }),
+ );
+ }
+ },
+ },
+ {
+ name: "Transfer Max",
+ maxRun: 1,
+ transaction: ({ account, siblings, bridge }) => {
+ const updates: Array> = [
+ {
+ recipient: pickSiblings(siblings, maxAccount).freshAddress,
+ },
+ {
+ useAllAmount: true,
+ },
+ ];
+
+ if (Math.random() < 0.5) {
+ updates.push({
+ memo: getRandomTransferID(),
+ });
+ }
+
+ return {
+ transaction: bridge.createTransaction(account),
+ updates,
+ };
+ },
+ testDestination: genericTestDestination,
+ test: ({ account, transaction, operation }) => {
+ botTest("account spendable balance is zero", () =>
+ expect(account.spendableBalance.toString()).toBe("0"),
+ );
+
+ if (transaction.memo) {
+ botTest("operation memo", () =>
+ expect(operation.extra).toMatchObject({
+ memo: transaction.memo,
+ }),
+ );
+ }
+ },
+ },
+ ],
+};
+
+export default {
+ minaSpecs,
+};
diff --git a/libs/coin-modules/coin-mina/src/test/bridgeDatasetTest.ts b/libs/coin-modules/coin-mina/src/test/bridgeDatasetTest.ts
new file mode 100644
index 000000000000..fbefd652f89b
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/bridgeDatasetTest.ts
@@ -0,0 +1,184 @@
+import { BigNumber } from "bignumber.js";
+import {
+ AmountRequired,
+ InvalidAddress,
+ InvalidAddressBecauseDestinationIsAlsoSource,
+ NotEnoughBalance,
+} from "@ledgerhq/errors";
+import type { DatasetTest, CurrenciesData } from "@ledgerhq/types-live";
+import type { Transaction } from "../types/common";
+import { fromTransactionRaw } from "../bridge/transaction";
+import { InvalidMemoMina } from "../bridge/errors";
+
+const ACCOUNT_ADDRESS = "B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD";
+const ACCOUNT_ADDRESS_1 = "B62qkWcHhoisWDCR7v3gvWzX6wXEVuGYLHXq3mSym4GEzfYXmSDv314";
+
+const mina: CurrenciesData = {
+ FIXME_ignoreAccountFields: ["blockHash"],
+ scanAccounts: [
+ {
+ name: "mina seed 1",
+ apdus: `
+ => e00201000400000000
+ <= 423632716a574c733157334a3266464769786558343977316f3756765347754d424e6f746e46687a7333505a3750627464466268646544009000
+ => e00201000400000001
+ <= 423632716e4438387474693632364d694d6e7568504d624c69504c766664644657486a47667377795646754c5845614b644b366f344263009000
+ `,
+ },
+ ],
+ accounts: [
+ {
+ // Skipping due to rewards being auto-compounded, no operation as evidence
+ FIXME_tests: ["balance is sum of ops"],
+ raw: {
+ id: `js:2:mina:${ACCOUNT_ADDRESS}:`,
+ seedIdentifier: `${ACCOUNT_ADDRESS}`,
+ name: "MINA 1",
+ derivationMode: "minabip44h",
+ index: 0,
+ freshAddress: `${ACCOUNT_ADDRESS}`,
+ freshAddressPath: "44'/12586'/0'/0'/0'",
+ blockHeight: 0,
+ operations: [],
+ pendingOperations: [],
+ currencyId: "mina",
+ lastSyncDate: "",
+ balance: "1000000",
+ },
+ transactions: [
+ {
+ name: "not a valid address",
+ transaction: fromTransactionRaw({
+ family: "mina",
+ recipient: "novalidaddress",
+ fees: {
+ fee: new BigNumber(0).toString(),
+ accountCreationFee: new BigNumber(0).toString(),
+ },
+ amount: "1000",
+ memo: undefined,
+ nonce: 0,
+ }),
+ expectedStatus: {
+ errors: {
+ recipient: new InvalidAddress(),
+ },
+ warnings: {},
+ },
+ },
+ {
+ name: "not enough balance",
+ transaction: fromTransactionRaw({
+ family: "mina",
+ recipient: ACCOUNT_ADDRESS_1,
+ fees: {
+ fee: new BigNumber(0).toString(),
+ accountCreationFee: new BigNumber(0).toString(),
+ },
+ amount: (300 * 1e9).toString(),
+ memo: undefined,
+ nonce: 0,
+ }),
+ expectedStatus: {
+ errors: {
+ amount: new NotEnoughBalance(),
+ },
+ warnings: {},
+ },
+ },
+ {
+ name: "invalid Memo",
+ transaction: fromTransactionRaw({
+ family: "mina",
+ recipient: ACCOUNT_ADDRESS_1,
+ fees: {
+ fee: new BigNumber(0).toString(),
+ accountCreationFee: new BigNumber(0).toString(),
+ },
+ amount: "1000",
+ memo: "string greated than 32 chars is invalid",
+ nonce: 0,
+ }),
+ expectedStatus: {
+ errors: {
+ transaction: new InvalidMemoMina(),
+ },
+ warnings: {},
+ },
+ },
+ {
+ name: "amount Required",
+ transaction: fromTransactionRaw({
+ family: "mina",
+ recipient: ACCOUNT_ADDRESS_1,
+ memo: undefined,
+ amount: "0",
+ fees: {
+ fee: new BigNumber(0).toString(),
+ accountCreationFee: new BigNumber(0).toString(),
+ },
+ nonce: 0,
+ }),
+ expectedStatus: {
+ errors: {
+ amount: new AmountRequired(),
+ },
+ warnings: {},
+ },
+ },
+ {
+ name: "recipient same as source",
+ transaction: fromTransactionRaw({
+ family: "mina",
+ recipient: ACCOUNT_ADDRESS,
+ amount: "10",
+ fees: {
+ fee: new BigNumber(0).toString(),
+ accountCreationFee: new BigNumber(0).toString(),
+ },
+ memo: undefined,
+ nonce: 0,
+ }),
+ expectedStatus: {
+ errors: {
+ recipient: new InvalidAddressBecauseDestinationIsAlsoSource(),
+ },
+ warnings: {},
+ },
+ },
+ {
+ name: "new account and sufficient amount",
+ transaction: fromTransactionRaw({
+ family: "mina",
+ recipient: ACCOUNT_ADDRESS_1,
+ amount: "1000",
+ fees: {
+ fee: new BigNumber(0).toString(),
+ accountCreationFee: new BigNumber(0).toString(),
+ },
+ memo: undefined,
+ nonce: 0,
+ }),
+ expectedStatus: {
+ amount: new BigNumber("1000"),
+ errors: {},
+ warnings: {},
+ },
+ },
+ ],
+ },
+ ],
+};
+
+export const dataset: DatasetTest = {
+ implementations: ["js"],
+ currencies: {
+ mina,
+ },
+};
+
+describe("Mina bridge", () => {
+ test.todo(
+ "This is an empty test to make jest command pass. Remove it once there is a real test.",
+ );
+});
diff --git a/libs/coin-modules/coin-mina/src/test/index.ts b/libs/coin-modules/coin-mina/src/test/index.ts
new file mode 100644
index 000000000000..5f9103148614
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/index.ts
@@ -0,0 +1,3 @@
+export * from "./bridgeDatasetTest";
+export * from "./bot-specs";
+export * from "./speculos-deviceActions";
diff --git a/libs/coin-modules/coin-mina/src/test/logic.unit.test.ts b/libs/coin-modules/coin-mina/src/test/logic.unit.test.ts
new file mode 100644
index 000000000000..80b18926dde9
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/logic.unit.test.ts
@@ -0,0 +1,78 @@
+import { getAccountNumFromPath, isValidAddress } from "../common-logic";
+
+describe("getAccountNumFromPath", () => {
+ it("should return undefined for invalid account number", () => {
+ const account = getAccountNumFromPath("44'/616'/4'/0/0");
+ expect(account).toBe(undefined);
+ });
+
+ it("should return undefined for unsupported path", () => {
+ const account = getAccountNumFromPath("44'/616'/4/0/0");
+ expect(account).toBe(undefined);
+ });
+
+ it("should return the account number", () => {
+ const account = getAccountNumFromPath("44'/12586'/4'/0/0");
+ expect(account).toBe(4);
+ });
+});
+
+describe("testingAddress", () => {
+ const validAddresses = [
+ "B62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc",
+ "B62qr5cXFjdnZXYxP5dEwRY7wENxcod4Q2oLxUDiq1QrBXZZyxMH8q4",
+ "B62qqmRToRiXZjyLLMJoGnQFXXZuZWdqaNYr43xEDDQzkXMHLouCMZp",
+ "B62qnixP59E4vJytpDWZ5YQPrnmqb7YNwhVWiuSAkxbYdX5RauHWwcm",
+ "B62qmfBiJx88gM9opov4MDxmDVKMutQsBQ1aGt7TrQYyGQx66fRFxvC",
+ "B62qosg21UpwpfPFaxTyirdfUVDHe2Ynsyv1QydE4z34zbLuBZ92ALM",
+ "B62qkWUvsVEnXmd4poHbkKujHNnjxkDcZtrLxN1FTa8pp3GkfHMB1gv",
+ "B62qoiK7DJurVUUJx1dmJGULdNUmX5bjdiYvoWXEXGugS2Cx3YDsHhy",
+ "B62qn1KptFUxxu8aRS52NGQ3GWzn5h8v7U9k571r4LCs5obpoZyd81e",
+ "B62qis2tX1rveddCeJeBAZJnXcCwWPp1x9ScZ3iMCxbV29gRbxWo7qi",
+ "B62qpBKEDTnS4efjBmou7iztx5x152JEmc29XMR1Y3FVCpnmfKGX4R4",
+ "B62qro5bGnk7eCNMA1S5QWmzn5sCcRWckbw83GGaqN3HM2QzP9zYS83",
+ "B62qospDjUj43x2yMKiNehojWWRUsE1wpdUDVpfxH8V3n5Y1QgJKFfw",
+ "B62qrmYwToypQv8v9cjxJdyhAxKihrqtTtEkYC4Y3u412KCPLGSD93V",
+ "B62qj3rpYkGM1T3VN6JDAJs9NccHCRQDYMcQ6UCBc81ff5HXTDjU44d",
+ "B62qp2kks3r14P8GWkR2ieT18JobwnmrBFGEoqy3dAReiyM8aDp4be7",
+ "B62qpW1SYPcp7TcHJYL6egnN9qzvNtQL5XGyiM8S6UsHvxCYzhhFPjz",
+ "B62qospDjUj43x2yMKiNehojWWRUsE1wpdUDVpfxH8V3n5Y1QgJKFfw",
+ "B62qj5L8U8A8gexpHLWHxBdfjKuWb8HMguVPecQ5FGqgZAwBAKHvhEy",
+ "B62qnt5WShcbVVnVqQqWjkyMJdxMwLq4QbRbgMjoi5nmvQw7dZLRtpx",
+ "B62qrGUxqRWn9A8PEJschgLZuS5S1GJiairh65mgTapaK58nkTKHUs8",
+ "B62qkS7hmMkzmNDjeCUKyAMZSw1c98MxszZPA7WnvBuh7Pq66ztiwdt",
+ "B62qjGWerE9MPNk7E2jEJe9Ex5GxkNR9JCc5mhFeJdGFaNDHnMdGQJQ",
+ "B62qpp2DLkLxwFn1QZdkEWgiRFMYnkgh6cj5AJC5pqCYiALh8BmiYJ8",
+ "B62qqALaAoEnaJPSNmQaDkUwFGiKwZo4zRK4Ay5eSMxAMVhNxwr2KeM",
+ "B62qospDjUj43x2yMKiNehojWWRUsE1wpdUDVpfxH8V3n5Y1QgJKFfw",
+ "B62qr3epzHUrxrdminUN4Hzuinuc7aBDAFSR94mPmmxVsbuFpUvDDq6",
+ "B62qrJurUKtcqdhQu1XtJJfSH7rR1xrEtSWPQQcFwBJBwVcsFSyVSM3",
+ ];
+
+ const invalidAddresses = [
+ "", // Empty address
+ null, // Null address
+ undefined, // Undefined address
+ "123", // Too short
+ "B61qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Incorrect prefix
+ "B62q!@#$%^&*()_+{}|:<>?`~", // Invalid characters
+ "B62qj5L8U8A8gexpHLWHxBdfjKuWb8HMguVPecQ5FGqgZAwBAKHvhE", // Too short
+ "B62qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq", // Too long
+ " B62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Leading whitespace
+ "B62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc ", // Trailing whitespace
+ "B62qiVhtBtqakq8sNTHdC TXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Internal whitespace
+ "C62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Incorrect prefix
+ ];
+
+ it("should return true for valid address", () => {
+ for (const address of validAddresses) {
+ expect(isValidAddress(address)).toBe(true);
+ }
+ });
+
+ it("should return false for invalid address", () => {
+ for (const address of invalidAddresses) {
+ expect(isValidAddress(address as string)).toBe(false);
+ }
+ });
+});
diff --git a/libs/coin-modules/coin-mina/src/test/rosetta.unit.test.ts b/libs/coin-modules/coin-mina/src/test/rosetta.unit.test.ts
new file mode 100644
index 000000000000..76718d24b09a
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/rosetta.unit.test.ts
@@ -0,0 +1,15 @@
+import { fetchTransactionMetadata } from "../api/rosetta";
+import { setConfig } from "./testUtils";
+setConfig();
+
+test("get metadata for a transactions", async () => {
+ const metadata = await fetchTransactionMetadata(
+ "B62qkdFWJSW8zaTBZjTVtmeU3rVxyUkNxPhKKW8T2JBtpj5XfdywLSM",
+ "B62qkWcHhoisWDCR7v3gvWzX6wXEVuGYLHXq3mSym4GEzfYXmSDv314",
+ 10000000,
+ 10000000,
+ );
+
+ expect(metadata).toBeDefined();
+ expect(metadata.data.suggested_fee).toHaveLength(1);
+});
diff --git a/libs/coin-modules/coin-mina/src/test/speculos-deviceActions.ts b/libs/coin-modules/coin-mina/src/test/speculos-deviceActions.ts
new file mode 100644
index 000000000000..ce6ac1b08d51
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/speculos-deviceActions.ts
@@ -0,0 +1,73 @@
+import type { DeviceAction } from "@ledgerhq/coin-framework/bot/types";
+import type { Transaction } from "../types/common";
+import { deviceActionFlow, SpeculosButton } from "@ledgerhq/coin-framework/bot/specs";
+import { formatCurrencyUnit } from "@ledgerhq/coin-framework/lib/currencies/formatCurrencyUnit";
+
+export const acceptTransaction: DeviceAction = deviceActionFlow({
+ steps: [
+ {
+ title: "Sign",
+ button: SpeculosButton.RIGHT,
+ },
+ {
+ title: "Type",
+ button: SpeculosButton.RIGHT,
+ expectedValue: () => "Payment",
+ },
+ {
+ title: "Sender",
+ button: SpeculosButton.RIGHT,
+ expectedValue: ({ account }) => account.freshAddress,
+ },
+ {
+ title: "Receiver",
+ button: SpeculosButton.RIGHT,
+ expectedValue: ({ transaction }) => transaction.recipient,
+ },
+ {
+ title: "Amount",
+ button: SpeculosButton.RIGHT,
+ expectedValue: ({ transaction, account }) =>
+ `MINA ${formatCurrencyUnit(account.currency.units[0], transaction.amount, {
+ dynamicSignificantDigits: 11,
+ staticSignificantDigits: 11,
+ })}`,
+ },
+ {
+ title: "Fee",
+ button: SpeculosButton.RIGHT,
+ expectedValue: ({ transaction, account }) =>
+ `MINA ${formatCurrencyUnit(account.currency.units[0], transaction.fees.fee, {
+ dynamicSignificantDigits: 11,
+ staticSignificantDigits: 11,
+ })}`,
+ },
+ {
+ title: "Total",
+ button: SpeculosButton.RIGHT,
+ expectedValue: ({ transaction, account }) =>
+ `MINA ${formatCurrencyUnit(
+ account.currency.units[0],
+ transaction.fees.fee.plus(transaction.amount),
+ {
+ dynamicSignificantDigits: 11,
+ staticSignificantDigits: 11,
+ },
+ )}`,
+ },
+ {
+ title: "Memo",
+ button: SpeculosButton.RIGHT,
+ expectedValue: ({ transaction }) => transaction.memo ?? "",
+ },
+ {
+ title: "Nonce",
+ button: SpeculosButton.RIGHT,
+ expectedValue: ({ transaction }) => transaction.nonce.toString(),
+ },
+ {
+ title: "Approve",
+ button: SpeculosButton.BOTH,
+ },
+ ],
+});
diff --git a/libs/coin-modules/coin-mina/src/test/synchronisation.unit.test.ts b/libs/coin-modules/coin-mina/src/test/synchronisation.unit.test.ts
new file mode 100644
index 000000000000..410e5a9929a6
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/synchronisation.unit.test.ts
@@ -0,0 +1,30 @@
+import invariant from "invariant";
+import { getTransactions } from "../api";
+import { mapRosettaTxnToOperation } from "../bridge/synchronisation";
+import { setConfig } from "./testUtils";
+
+setConfig();
+
+describe("synchronisation", () => {
+ it("should map rosetta txn to operation", async () => {
+ const txns = await getTransactions("B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD");
+ const ops = (
+ await Promise.all(txns.flatMap(t => mapRosettaTxnToOperation("accountId", "address", t)))
+ ).flat();
+
+ expect(ops.length).toBeGreaterThan(0);
+ }, 1000000);
+});
+
+test("get transaction", async () => {
+ const address = "B62qqP3a8sYEFKnDU3tdhUfmSqAP2MRqpn72jUKVEvSRVPM4bkcAV5c";
+ const txs = await getTransactions(address);
+ const txHash = "5JuL2ErRKXVNqN48KsYJTjsCmhbj5ufgmjDNSdH5rDU8vvC55EBD";
+
+ const tx = txs.find(tx => tx.transaction.transaction_identifier.hash === txHash);
+ invariant(tx, "tx not found");
+
+ const op = await mapRosettaTxnToOperation("accountId", address, tx);
+
+ expect(op).toBeDefined();
+}, 1000000);
diff --git a/libs/coin-modules/coin-mina/src/test/testUtils.ts b/libs/coin-modules/coin-mina/src/test/testUtils.ts
new file mode 100644
index 000000000000..76daf9246709
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/test/testUtils.ts
@@ -0,0 +1,15 @@
+import { setCoinConfig } from "../config";
+
+export const setConfig = () => {
+ setCoinConfig((): any => {
+ return {
+ infra: {
+ API_MINA_ROSETTA_NODE: "https://mina-ledger-live.zondax.ch",
+ },
+ };
+ });
+};
+
+export const getRandomTransferID = () => {
+ return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
+};
diff --git a/libs/coin-modules/coin-mina/src/types/common.ts b/libs/coin-modules/coin-mina/src/types/common.ts
new file mode 100644
index 000000000000..5978f373dddc
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/types/common.ts
@@ -0,0 +1,70 @@
+import type { BigNumber } from "bignumber.js";
+import {
+ Account,
+ AccountRaw,
+ Operation,
+ TransactionCommon,
+ TransactionCommonRaw,
+ TransactionStatusCommon,
+ TransactionStatusCommonRaw,
+} from "@ledgerhq/types-live";
+
+export type Transaction = TransactionCommon & {
+ family: "mina";
+ fees: {
+ fee: BigNumber;
+ accountCreationFee: BigNumber;
+ };
+ memo: string | undefined;
+ nonce: number;
+};
+
+export type TransactionRaw = TransactionCommonRaw & {
+ family: "mina";
+ fees: {
+ fee: string;
+ accountCreationFee: string;
+ };
+ memo: string | undefined;
+ nonce: number;
+};
+
+export type MinaAccount = Account;
+
+export type MinaAPIAccount = {
+ blockHeight: number;
+ balance: BigNumber;
+ spendableBalance: BigNumber;
+};
+
+export type MinaAccountRaw = AccountRaw;
+
+export type TransactionStatus = TransactionStatusCommon;
+
+export type TransactionStatusRaw = TransactionStatusCommonRaw;
+
+export type StatusErrorMap = {
+ recipient?: Error;
+ amount?: Error;
+ fees?: Error;
+ transaction?: Error;
+};
+
+export type MinaUnsignedTransaction = {
+ txType: number;
+ senderAccount: number;
+ senderAddress: string;
+ receiverAddress: string;
+ amount: number;
+ fee: number;
+ nonce: number;
+ memo: string;
+ networkId: number;
+};
+
+export interface MinaSignedTransaction {
+ signature: string;
+ transaction: MinaUnsignedTransaction;
+}
+
+export type MinaOperation = Operation<{ memo: string | undefined; accountCreationFee: string }>;
diff --git a/libs/coin-modules/coin-mina/src/types/index.ts b/libs/coin-modules/coin-mina/src/types/index.ts
new file mode 100644
index 000000000000..675cc2fbca27
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/types/index.ts
@@ -0,0 +1,2 @@
+export * from "./common";
+export * from "./signer";
diff --git a/libs/coin-modules/coin-mina/src/types/signer.ts b/libs/coin-modules/coin-mina/src/types/signer.ts
new file mode 100644
index 000000000000..d1498b404b99
--- /dev/null
+++ b/libs/coin-modules/coin-mina/src/types/signer.ts
@@ -0,0 +1,29 @@
+interface SignTransactionArgs {
+ txType: number;
+ senderAccount: number;
+ senderAddress: string;
+ receiverAddress: string;
+ amount: number;
+ fee: number;
+ nonce: number;
+ validUntil?: number;
+ memo?: string;
+ networkId: number;
+}
+interface BaseLedgerResponse {
+ returnCode: string;
+ statusText?: string;
+ message?: string;
+}
+interface SignTransactionResponse extends BaseLedgerResponse {
+ signature?: string | null;
+}
+
+export interface GetAddressResponse extends BaseLedgerResponse {
+ publicKey?: string | null;
+}
+export type MinaSignature = { signature?: string };
+export interface MinaSigner {
+ getAddress(account?: number, verify?: boolean): Promise;
+ signTransaction(transaction: SignTransactionArgs): Promise;
+}
diff --git a/libs/coin-modules/coin-mina/tsconfig.json b/libs/coin-modules/coin-mina/tsconfig.json
new file mode 100644
index 000000000000..a5dd26c4e813
--- /dev/null
+++ b/libs/coin-modules/coin-mina/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../../../tsconfig.base",
+ "compilerOptions": {
+ "declaration": true,
+ "declarationMap": true,
+ "downlevelIteration": true,
+ "lib": ["es2020", "dom"],
+ "outDir": "lib",
+ "exactOptionalPropertyTypes": true,
+ "typeRoots": ["./types", "./node_modules/@types"],
+ },
+ "include": ["src/**/*", "types.d.ts"],
+}
diff --git a/libs/ledger-live-common/.unimportedrc.json b/libs/ledger-live-common/.unimportedrc.json
index 871f7c81544d..f3d9190a7c39 100644
--- a/libs/ledger-live-common/.unimportedrc.json
+++ b/libs/ledger-live-common/.unimportedrc.json
@@ -110,6 +110,7 @@
"src/families/filecoin/types.ts",
"src/families/hedera/types.ts",
"src/families/internet_computer/types.ts",
+ "src/families/mina/types.ts",
"src/families/near/banner.ts",
"src/families/near/constants.ts",
"src/families/near/logic.ts",
diff --git a/libs/ledger-live-common/package.json b/libs/ledger-live-common/package.json
index cd26c8aaf5f8..dc2dce6239b6 100644
--- a/libs/ledger-live-common/package.json
+++ b/libs/ledger-live-common/package.json
@@ -143,6 +143,7 @@
"@ledgerhq/coin-icon": "workspace:^",
"@ledgerhq/coin-internet_computer": "workspace:^",
"@ledgerhq/coin-multiversx": "workspace:^",
+ "@ledgerhq/coin-mina": "workspace:^",
"@ledgerhq/coin-near": "workspace:^",
"@ledgerhq/coin-polkadot": "workspace:^",
"@ledgerhq/coin-solana": "workspace:^",
@@ -213,6 +214,7 @@
"@zondax/ledger-cosmos-js": "3.0.3",
"@zondax/ledger-filecoin": "^2.0.2",
"@zondax/ledger-icp": "^0.7.0",
+ "@zondax/ledger-mina-js": "0.0.2",
"@zondax/ledger-stacks": "^1.0.2",
"async": "^3.2.3",
"axios": "1.7.7",
diff --git a/libs/ledger-live-common/scripts/sync-families-dispatch.mjs b/libs/ledger-live-common/scripts/sync-families-dispatch.mjs
index da73dedd30d5..1bd476e10b82 100644
--- a/libs/ledger-live-common/scripts/sync-families-dispatch.mjs
+++ b/libs/ledger-live-common/scripts/sync-families-dispatch.mjs
@@ -43,6 +43,7 @@ const familiesWPackage = [
"tron",
"vechain",
"xrp",
+ "mina",
];
cd(path.join(__dirname, "..", "src"));
diff --git a/libs/ledger-live-common/src/__tests__/migration/account-migration.ts b/libs/ledger-live-common/src/__tests__/migration/account-migration.ts
index 2fccc688b39a..37535a7837d1 100644
--- a/libs/ledger-live-common/src/__tests__/migration/account-migration.ts
+++ b/libs/ledger-live-common/src/__tests__/migration/account-migration.ts
@@ -96,6 +96,7 @@ setSupportedCurrencies([
"filecoin",
"linea",
"ton",
+ "mina",
]);
LiveConfig.setConfig(liveConfig);
diff --git a/libs/ledger-live-common/src/__tests__/test-helpers/environment.ts b/libs/ledger-live-common/src/__tests__/test-helpers/environment.ts
index 24fba475e146..edcacf9a0b32 100644
--- a/libs/ledger-live-common/src/__tests__/test-helpers/environment.ts
+++ b/libs/ledger-live-common/src/__tests__/test-helpers/environment.ts
@@ -110,6 +110,7 @@ setSupportedCurrencies([
"zenrock",
"sonic",
"sonic_blaze",
+ "mina",
]);
LiveConfig.setConfig(liveConfig);
diff --git a/libs/ledger-live-common/src/config/sharedConfig.ts b/libs/ledger-live-common/src/config/sharedConfig.ts
index 88158cbec1d9..237894653739 100644
--- a/libs/ledger-live-common/src/config/sharedConfig.ts
+++ b/libs/ledger-live-common/src/config/sharedConfig.ts
@@ -12,6 +12,7 @@ import { fileCoinConfig } from "../families/filecoin/config";
import { hederaConfig } from "../families/hedera/config";
import { internetComputerConfig } from "../families/internet_computer/config";
import { nearConfig } from "../families/near/config";
+import { minaConfig } from "../families/mina/config";
import { polkadotConfig } from "../families/polkadot/config";
import { xrpConfig } from "../families/xrp/config";
import { solanaConfig } from "../families/solana/config";
@@ -53,6 +54,7 @@ export const liveConfig: ConfigSchema = {
...hederaConfig,
...internetComputerConfig,
...nearConfig,
+ ...minaConfig,
...polkadotConfig,
...xrpConfig,
...solanaConfig,
diff --git a/libs/ledger-live-common/src/families/mina/__snapshots__/bridge.integration.test.ts.snap b/libs/ledger-live-common/src/families/mina/__snapshots__/bridge.integration.test.ts.snap
new file mode 100644
index 000000000000..1ac7904169e1
--- /dev/null
+++ b/libs/ledger-live-common/src/families/mina/__snapshots__/bridge.integration.test.ts.snap
@@ -0,0 +1,88 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`mina currency bridge scanAccounts mina seed 1 1`] = `
+[
+ {
+ "balance": "2799900000",
+ "currencyId": "mina",
+ "derivationMode": "minabip44h",
+ "freshAddress": "B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD",
+ "freshAddressPath": "44'/12586'/0'/0/0",
+ "id": "js:2:mina:B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD:minabip44h",
+ "index": 0,
+ "operationsCount": 2,
+ "pendingOperations": [],
+ "seedIdentifier": "B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD",
+ "spendableBalance": "2799900000",
+ "swapHistory": [],
+ "syncHash": undefined,
+ "used": true,
+ },
+ {
+ "balance": "0",
+ "currencyId": "mina",
+ "derivationMode": "minabip44h",
+ "freshAddress": "B62qnD88tti626MiMnuhPMbLiPLvfddFWHjGfswyVFuLXEaKdK6o4Bc",
+ "freshAddressPath": "44'/12586'/1'/0/0",
+ "id": "js:2:mina:B62qnD88tti626MiMnuhPMbLiPLvfddFWHjGfswyVFuLXEaKdK6o4Bc:minabip44h",
+ "index": 1,
+ "operationsCount": 0,
+ "pendingOperations": [],
+ "seedIdentifier": "B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD",
+ "spendableBalance": "0",
+ "swapHistory": [],
+ "syncHash": undefined,
+ "used": false,
+ },
+]
+`;
+
+exports[`mina currency bridge scanAccounts mina seed 1 2`] = `
+[
+ [
+ {
+ "accountId": "js:2:mina:B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD:minabip44h",
+ "blockHash": "3NL5Fsdbap5N5QRP7KeTUot3ps68dqVsQDkaJARVBYHJzSA9eY2a",
+ "blockHeight": 428719,
+ "extra": {
+ "accountCreationFee": "1000000000",
+ "memo": "12121",
+ },
+ "fee": "10100000",
+ "hasFailed": false,
+ "hash": "5Ju6eMsfbwUvqkBobMG2VTVt6heMckfjwxQjTuGjUchMCVXsVV3z",
+ "id": "js:2:mina:B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD:minabip44h-5Ju6eMsfbwUvqkBobMG2VTVt6heMckfjwxQjTuGjUchMCVXsVV3z-IN",
+ "recipients": [
+ "B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD",
+ ],
+ "senders": [
+ "B62qkdFWJSW8zaTBZjTVtmeU3rVxyUkNxPhKKW8T2JBtpj5XfdywLSM",
+ ],
+ "type": "IN",
+ "value": "3000000000",
+ },
+ {
+ "accountId": "js:2:mina:B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD:minabip44h",
+ "blockHash": "3NKHfaXxdMSUavUsYWhTJy4fzf3Bp5KzyCpbfKUHFZbqh9VSPrGP",
+ "blockHeight": 428798,
+ "extra": {
+ "accountCreationFee": "0",
+ "memo": "",
+ },
+ "fee": "200100000",
+ "hasFailed": false,
+ "hash": "5JuzzSWMVWj4NFV94q6piAgUehfHpAs7f6uu74TAQbxh2cD574CZ",
+ "id": "js:2:mina:B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD:minabip44h-5JuzzSWMVWj4NFV94q6piAgUehfHpAs7f6uu74TAQbxh2cD574CZ-REDELEGATE",
+ "recipients": [
+ "B62qq3TQ8AP7MFYPVtMx5tZGF3kWLJukfwG1A1RGvaBW1jfTPTkDBW6",
+ ],
+ "senders": [
+ "B62qjWLs1W3J2fFGixeX49w1o7VvSGuMBNotnFhzs3PZ7PbtdFbhdeD",
+ ],
+ "type": "REDELEGATE",
+ "value": "0",
+ },
+ ],
+ [],
+]
+`;
diff --git a/libs/ledger-live-common/src/families/mina/bridge.integration.test.ts b/libs/ledger-live-common/src/families/mina/bridge.integration.test.ts
new file mode 100644
index 000000000000..bd27fc3382bf
--- /dev/null
+++ b/libs/ledger-live-common/src/families/mina/bridge.integration.test.ts
@@ -0,0 +1,5 @@
+import "../../__tests__/test-helpers/setup";
+import { testBridge } from "../../__tests__/test-helpers/bridge";
+import { dataset } from "@ledgerhq/coin-mina/test/index";
+
+testBridge(dataset);
diff --git a/libs/ledger-live-common/src/families/mina/config.ts b/libs/ledger-live-common/src/families/mina/config.ts
new file mode 100644
index 000000000000..adde2240eabc
--- /dev/null
+++ b/libs/ledger-live-common/src/families/mina/config.ts
@@ -0,0 +1,15 @@
+import { CurrencyLiveConfigDefinition } from "../../config";
+
+const minaConfig: CurrencyLiveConfigDefinition = {
+ config_currency_mina: {
+ type: "object",
+ default: {
+ status: { type: "active" },
+ infra: {
+ API_MINA_ROSETTA_NODE: "https://mina-ledger-live.zondax.ch",
+ },
+ },
+ },
+};
+
+export { minaConfig };
diff --git a/libs/ledger-live-common/src/families/mina/setup.ts b/libs/ledger-live-common/src/families/mina/setup.ts
new file mode 100644
index 000000000000..1cc3209ee2b2
--- /dev/null
+++ b/libs/ledger-live-common/src/families/mina/setup.ts
@@ -0,0 +1,30 @@
+// Goal of this file is to inject all necessary device/signer dependency to coin-modules
+
+import { createBridges } from "@ledgerhq/coin-mina/bridge";
+import makeCliTools from "@ledgerhq/coin-mina/bridge/cli-transaction";
+import minaResolver from "@ledgerhq/coin-mina/signer";
+import { Transaction } from "@ledgerhq/coin-mina/types";
+import { MinaApp } from "@zondax/ledger-mina-js";
+import Transport from "@ledgerhq/hw-transport";
+import type { Bridge } from "@ledgerhq/types-live";
+import { MinaSigner } from "@ledgerhq/coin-mina/types";
+import { MinaCoinConfig } from "@ledgerhq/coin-mina/lib/config";
+import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
+import { CreateSigner, createResolver, executeWithSigner } from "../../bridge/setup";
+import type { Resolver } from "../../hw/getAddress/types";
+import { getCurrencyConfiguration } from "../../config";
+
+const createSigner: CreateSigner = (transport: Transport) => {
+ return new MinaApp(transport as any);
+};
+
+const getCoinConfig: MinaCoinConfig = () =>
+ getCurrencyConfiguration>(getCryptoCurrencyById("mina"));
+
+const bridge: Bridge = createBridges(executeWithSigner(createSigner), getCoinConfig);
+
+const resolver: Resolver = createResolver(createSigner, minaResolver);
+
+const cliTools = makeCliTools();
+
+export { bridge, cliTools, resolver };
diff --git a/libs/ledger-live-common/src/families/mina/types.ts b/libs/ledger-live-common/src/families/mina/types.ts
new file mode 100644
index 000000000000..913aa28def59
--- /dev/null
+++ b/libs/ledger-live-common/src/families/mina/types.ts
@@ -0,0 +1,2 @@
+// Encapsulate for LLD and LLM
+export * from "@ledgerhq/coin-mina/types";
diff --git a/libs/ledger-live-common/src/featureFlags/defaultFeatures.ts b/libs/ledger-live-common/src/featureFlags/defaultFeatures.ts
index 977e43d0e72e..e300b6785ddd 100644
--- a/libs/ledger-live-common/src/featureFlags/defaultFeatures.ts
+++ b/libs/ledger-live-common/src/featureFlags/defaultFeatures.ts
@@ -89,6 +89,7 @@ export const CURRENCY_DEFAULT_FEATURES = {
currencyZenrock: DEFAULT_FEATURE,
currencySonicBlaze: DEFAULT_FEATURE,
currencySonic: DEFAULT_FEATURE,
+ currencyMina: DEFAULT_FEATURE,
};
/**
diff --git a/libs/ledger-live-common/src/generated/bridge/js.ts b/libs/ledger-live-common/src/generated/bridge/js.ts
index b823a6c24ec6..29cf92655671 100644
--- a/libs/ledger-live-common/src/generated/bridge/js.ts
+++ b/libs/ledger-live-common/src/generated/bridge/js.ts
@@ -21,6 +21,7 @@ import { bridge as ton } from "../../families/ton/setup";
import { bridge as tron } from "../../families/tron/setup";
import { bridge as vechain } from "../../families/vechain/setup";
import { bridge as xrp } from "../../families/xrp/setup";
+import { bridge as mina } from "../../families/mina/setup";
export default {
celo,
@@ -46,4 +47,5 @@ export default {
tron,
vechain,
xrp,
+ mina,
};
diff --git a/libs/ledger-live-common/src/generated/cli-transaction.ts b/libs/ledger-live-common/src/generated/cli-transaction.ts
index 0eea25c82c93..581111a19cc4 100644
--- a/libs/ledger-live-common/src/generated/cli-transaction.ts
+++ b/libs/ledger-live-common/src/generated/cli-transaction.ts
@@ -21,6 +21,7 @@ import { cliTools as ton } from "../families/ton/setup";
import { cliTools as tron } from "../families/tron/setup";
import { cliTools as vechain } from "../families/vechain/setup";
import { cliTools as xrp } from "../families/xrp/setup";
+import { cliTools as mina } from "../families/mina/setup";
export default {
celo,
@@ -46,4 +47,5 @@ export default {
tron,
vechain,
xrp,
+ mina,
};
diff --git a/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts b/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts
index b2a97337b0bc..def10d18e764 100644
--- a/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts
+++ b/libs/ledger-live-common/src/generated/deviceTransactionConfig.ts
@@ -20,6 +20,7 @@ import tezos from "@ledgerhq/coin-tezos/deviceTransactionConfig";
import ton from "@ledgerhq/coin-ton/deviceTransactionConfig";
import tron from "@ledgerhq/coin-tron/deviceTransactionConfig";
import xrp from "@ledgerhq/coin-xrp/deviceTransactionConfig";
+import mina from "@ledgerhq/coin-mina/deviceTransactionConfig";
export default {
celo,
@@ -44,6 +45,7 @@ export default {
ton,
tron,
xrp,
+ mina,
};
import { ExtraDeviceTransactionField as ExtraDeviceTransactionField_aptos } from "@ledgerhq/coin-aptos/bridge/deviceTransactionConfig";
import { ExtraDeviceTransactionField as ExtraDeviceTransactionField_casper } from "@ledgerhq/coin-casper/bridge/deviceTransactionConfig";
diff --git a/libs/ledger-live-common/src/generated/hw-getAddress.ts b/libs/ledger-live-common/src/generated/hw-getAddress.ts
index 148b23db5564..d8a51b0ae1c0 100644
--- a/libs/ledger-live-common/src/generated/hw-getAddress.ts
+++ b/libs/ledger-live-common/src/generated/hw-getAddress.ts
@@ -21,6 +21,7 @@ import { resolver as ton } from "../families/ton/setup";
import { resolver as tron } from "../families/tron/setup";
import { resolver as vechain } from "../families/vechain/setup";
import { resolver as xrp } from "../families/xrp/setup";
+import { resolver as mina } from "../families/mina/setup";
export default {
celo,
@@ -46,4 +47,5 @@ export default {
tron,
vechain,
xrp,
+ mina,
};
diff --git a/libs/ledger-live-common/src/generated/specs.ts b/libs/ledger-live-common/src/generated/specs.ts
index 0ff0028e1466..9cd30d877dec 100644
--- a/libs/ledger-live-common/src/generated/specs.ts
+++ b/libs/ledger-live-common/src/generated/specs.ts
@@ -21,6 +21,7 @@ import ton from "@ledgerhq/coin-ton/specs";
import tron from "@ledgerhq/coin-tron/specs";
import vechain from "@ledgerhq/coin-vechain/specs";
import xrp from "@ledgerhq/coin-xrp/specs";
+import mina from "@ledgerhq/coin-mina/specs";
export default {
celo,
@@ -46,4 +47,5 @@ export default {
tron,
vechain,
xrp,
+ mina,
};
diff --git a/libs/ledger-live-common/src/generated/transaction.ts b/libs/ledger-live-common/src/generated/transaction.ts
index e7ab89e96671..a43328d1e896 100644
--- a/libs/ledger-live-common/src/generated/transaction.ts
+++ b/libs/ledger-live-common/src/generated/transaction.ts
@@ -21,6 +21,7 @@ import ton from "@ledgerhq/coin-ton/transaction";
import tron from "@ledgerhq/coin-tron/transaction";
import vechain from "@ledgerhq/coin-vechain/transaction";
import xrp from "@ledgerhq/coin-xrp/transaction";
+import mina from "@ledgerhq/coin-mina/transaction";
export default {
celo,
@@ -46,4 +47,5 @@ export default {
tron,
vechain,
xrp,
+ mina,
};
diff --git a/libs/ledger-live-common/src/generated/types.ts b/libs/ledger-live-common/src/generated/types.ts
index 7187f18616fb..9990cbb3fab8 100644
--- a/libs/ledger-live-common/src/generated/types.ts
+++ b/libs/ledger-live-common/src/generated/types.ts
@@ -70,6 +70,12 @@ import type {
TransactionStatus as internet_computerTransactionStatus,
TransactionStatusRaw as internet_computerTransactionStatusRaw,
} from "@ledgerhq/coin-internet_computer/types/index";
+import type {
+ Transaction as minaTransaction,
+ TransactionRaw as minaTransactionRaw,
+ TransactionStatus as minaTransactionStatus,
+ TransactionStatusRaw as minaTransactionStatusRaw,
+} from "@ledgerhq/coin-mina/types/index";
import type {
Transaction as multiversxTransaction,
TransactionRaw as multiversxTransactionRaw,
@@ -150,6 +156,7 @@ export type Transaction =
| hederaTransaction
| iconTransaction
| internet_computerTransaction
+ | minaTransaction
| multiversxTransaction
| nearTransaction
| polkadotTransaction
@@ -175,6 +182,7 @@ export type TransactionRaw =
| hederaTransactionRaw
| iconTransactionRaw
| internet_computerTransactionRaw
+ | minaTransactionRaw
| multiversxTransactionRaw
| nearTransactionRaw
| polkadotTransactionRaw
@@ -200,6 +208,7 @@ export type TransactionStatus =
| hederaTransactionStatus
| iconTransactionStatus
| internet_computerTransactionStatus
+ | minaTransactionStatus
| multiversxTransactionStatus
| nearTransactionStatus
| polkadotTransactionStatus
@@ -225,6 +234,7 @@ export type TransactionStatusRaw =
| hederaTransactionStatusRaw
| iconTransactionStatusRaw
| internet_computerTransactionStatusRaw
+ | minaTransactionStatusRaw
| multiversxTransactionStatusRaw
| nearTransactionStatusRaw
| polkadotTransactionStatusRaw
diff --git a/libs/ledgerjs/packages/cryptoassets/src/abandonseed.ts b/libs/ledgerjs/packages/cryptoassets/src/abandonseed.ts
index 8dd7e8498c00..7d25cb8af34f 100644
--- a/libs/ledgerjs/packages/cryptoassets/src/abandonseed.ts
+++ b/libs/ledgerjs/packages/cryptoassets/src/abandonseed.ts
@@ -122,6 +122,7 @@ const abandonSeedAddresses: Partial> = {
zenrock: "zen1704dk997ccmk5x8smn8secphckfvbgxxfd99xxr",
sonic: EVM_DEAD_ADDRESS,
sonic_blaze: EVM_DEAD_ADDRESS,
+ mina: "B62qmphduibdMJQjEvnnDizL9kVV4ripuiE9adR2wsqtegJaxHJzCic",
};
/**
diff --git a/libs/ledgerjs/packages/cryptoassets/src/currencies.ts b/libs/ledgerjs/packages/cryptoassets/src/currencies.ts
index bfb7bf3a1a52..900e8b4cc0fb 100644
--- a/libs/ledgerjs/packages/cryptoassets/src/currencies.ts
+++ b/libs/ledgerjs/packages/cryptoassets/src/currencies.ts
@@ -3476,6 +3476,30 @@ export const cryptocurrenciesById: Record = {
},
],
},
+ mina: {
+ type: "CryptoCurrency",
+ id: "mina",
+ coinType: CoinType.MINA,
+ name: "Mina",
+ managerAppName: "Mina",
+ ticker: "MINA",
+ scheme: "mina",
+ color: "#e1effa",
+ family: "mina",
+ units: [
+ {
+ name: "MINA",
+ code: "MINA",
+ magnitude: 9,
+ },
+ ],
+ explorerViews: [
+ {
+ tx: "https://minascan.io/mainnet/tx/$hash/txInfo",
+ address: "https://minascan.io/mainnet/account/$address",
+ },
+ ],
+ },
injective: {
type: "CryptoCurrency",
id: "injective",
diff --git a/libs/ledgerjs/packages/types-cryptoassets/src/index.ts b/libs/ledgerjs/packages/types-cryptoassets/src/index.ts
index 6ee77ca1d12c..df5b0866c878 100644
--- a/libs/ledgerjs/packages/types-cryptoassets/src/index.ts
+++ b/libs/ledgerjs/packages/types-cryptoassets/src/index.ts
@@ -173,7 +173,8 @@ export type CryptoCurrencyId =
| "xion"
| "zenrock"
| "sonic"
- | "sonic_blaze";
+ | "sonic_blaze"
+ | "mina";
export type LedgerExplorerId =
| "btc"
diff --git a/libs/ledgerjs/packages/types-cryptoassets/src/slip44.ts b/libs/ledgerjs/packages/types-cryptoassets/src/slip44.ts
index 6f3bb9eeabd3..c65bfc960128 100644
--- a/libs/ledgerjs/packages/types-cryptoassets/src/slip44.ts
+++ b/libs/ledgerjs/packages/types-cryptoassets/src/slip44.ts
@@ -55,6 +55,7 @@ export enum CoinType {
LBRY = 140,
LITECOIN = 2,
LISK = 134,
+ MINA = 12586,
MIX = 76,
MONERO = 128,
MUSICOIN = 184,
diff --git a/libs/ledgerjs/packages/types-live/src/derivation.ts b/libs/ledgerjs/packages/types-live/src/derivation.ts
index 1e8509623d1b..e7a41c6dd458 100644
--- a/libs/ledgerjs/packages/types-live/src/derivation.ts
+++ b/libs/ledgerjs/packages/types-live/src/derivation.ts
@@ -32,4 +32,5 @@ export type DerivationMode =
| "stacks_wallet"
| "icon"
| "ton"
- | "aptos";
+ | "aptos"
+ | "minabip44h";
diff --git a/libs/ledgerjs/packages/types-live/src/feature.ts b/libs/ledgerjs/packages/types-live/src/feature.ts
index 2d33e6287962..9111840476c6 100644
--- a/libs/ledgerjs/packages/types-live/src/feature.ts
+++ b/libs/ledgerjs/packages/types-live/src/feature.ts
@@ -131,6 +131,7 @@ export type CurrencyFeatures = {
currencyZenrock: DefaultFeature;
currencySonic: DefaultFeature;
currencySonicBlaze: DefaultFeature;
+ currencyMina: DefaultFeature;
};
/**
diff --git a/libs/ui/packages/crypto-icons/src/svg/MINA.svg b/libs/ui/packages/crypto-icons/src/svg/MINA.svg
new file mode 100644
index 000000000000..46d51d90dbf5
--- /dev/null
+++ b/libs/ui/packages/crypto-icons/src/svg/MINA.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/package.json b/package.json
index 66bb6cd83f68..6adb79e7033a 100644
--- a/package.json
+++ b/package.json
@@ -78,6 +78,7 @@
"coin:tester": "pnpm --filter coin-tester",
"coin:multiversx": "pnpm --filter coin-multiversx",
"coin:near": "pnpm --filter coin-near",
+ "coin:mina": "pnpm --filter coin-mina",
"coin:polkadot": "pnpm --filter coin-polkadot",
"coin:ton": "pnpm --filter coin-ton",
"coin:solana": "pnpm --filter coin-solana",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 12c1878495c5..b5fb3b1d1f17 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2754,6 +2754,73 @@ importers:
specifier: ^29.1.1
version: 29.1.5(jest@29.7.0)(typescript@5.4.3)
+ libs/coin-modules/coin-mina:
+ dependencies:
+ '@ledgerhq/coin-framework':
+ specifier: workspace:^
+ version: link:../../coin-framework
+ '@ledgerhq/cryptoassets':
+ specifier: workspace:^
+ version: link:../../ledgerjs/packages/cryptoassets
+ '@ledgerhq/devices':
+ specifier: workspace:*
+ version: link:../../ledgerjs/packages/devices
+ '@ledgerhq/errors':
+ specifier: workspace:^
+ version: link:../../ledgerjs/packages/errors
+ '@ledgerhq/live-network':
+ specifier: workspace:^
+ version: link:../../live-network
+ '@ledgerhq/logs':
+ specifier: workspace:^
+ version: link:../../ledgerjs/packages/logs
+ '@ledgerhq/types-cryptoassets':
+ specifier: workspace:^
+ version: link:../../ledgerjs/packages/types-cryptoassets
+ '@ledgerhq/types-live':
+ specifier: workspace:^
+ version: link:../../ledgerjs/packages/types-live
+ bignumber.js:
+ specifier: ^9.1.2
+ version: 9.1.2
+ bs58check:
+ specifier: ^2.1.2
+ version: 2.1.2
+ expect:
+ specifier: ^27.4.6
+ version: 27.5.1
+ invariant:
+ specifier: ^2.2.2
+ version: 2.2.4
+ lodash:
+ specifier: ^4.17.21
+ version: 4.17.21
+ mina-ledger-js:
+ specifier: ^1.0.7
+ version: 1.0.7
+ rxjs:
+ specifier: ^7.8.1
+ version: 7.8.1
+ devDependencies:
+ '@types/bs58check':
+ specifier: ^2.1.2
+ version: 2.1.2
+ '@types/invariant':
+ specifier: ^2.2.2
+ version: 2.2.37
+ '@types/jest':
+ specifier: ^29.5.10
+ version: 29.5.14
+ '@types/lodash':
+ specifier: ^4.14.191
+ version: 4.17.14
+ jest:
+ specifier: ^29.7.0
+ version: 29.7.0
+ ts-jest:
+ specifier: ^29.1.1
+ version: 29.2.5(jest@29.7.0)(typescript@5.4.3)
+
libs/coin-modules/coin-module-boilerplate:
dependencies:
'@ledgerhq/coin-framework':
@@ -4152,6 +4219,9 @@ importers:
'@ledgerhq/coin-internet_computer':
specifier: workspace:^
version: link:../coin-modules/coin-internet_computer
+ '@ledgerhq/coin-mina':
+ specifier: workspace:^
+ version: link:../coin-modules/coin-mina
'@ledgerhq/coin-multiversx':
specifier: workspace:^
version: link:../coin-modules/coin-multiversx
@@ -4365,6 +4435,9 @@ importers:
'@zondax/ledger-icp':
specifier: ^0.7.0
version: 0.7.0
+ '@zondax/ledger-mina-js':
+ specifier: 0.0.2
+ version: 0.0.2
'@zondax/ledger-stacks':
specifier: ^1.0.2
version: 1.0.4
@@ -17494,6 +17567,12 @@ packages:
'@zondax/ledger-js@0.8.2':
resolution: {integrity: sha512-U/lzNzcJwfYGhhpwUviazihXzIv8w3rM31HbgKWOwF/xVS4/hHSLCGpONEGVwtgYUNDF7L0YfSy95/0H+tGtFA==}
+ '@zondax/ledger-js@1.2.0':
+ resolution: {integrity: sha512-HGvDU0s4zg0scu8ebGenFHFB6g5SLDqmrctncZUY9ie5pGibOU8C0VdjZSHbttSOCyh+IloLi/a4jyMPOEQGuQ==}
+
+ '@zondax/ledger-mina-js@0.0.2':
+ resolution: {integrity: sha512-6tB4voId5NOfn1XzYivyQnjq8A7eoz/2D+Ay0IDCimkF4wX2dWC0KKzatRnJmC80z8b37Hsi5/roSvkZUQ/bgw==}
+
'@zondax/ledger-stacks@1.0.4':
resolution: {integrity: sha512-R8CB0CZ2poTzpcG0jhzzXZvXF7axIsmZFhp06aHCUjgz+1df63YbC4tUzyzmseekwqNWnaebWFejQKJ99WiHZA==}
@@ -25321,6 +25400,9 @@ packages:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
+ mina-ledger-js@1.0.7:
+ resolution: {integrity: sha512-qKueVN8V0UyBCJciPNlAlbvrgrAy+ZC0FimlBu0SPzacGDIQ/Ut5VMnQn9TpjcebU5ResxDTvxY95Fihl0hPEA==}
+
mini-css-extract-plugin@2.8.1:
resolution: {integrity: sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==}
engines: {node: '>= 12.13.0'}
@@ -47859,6 +47941,14 @@ snapshots:
dependencies:
'@ledgerhq/hw-transport': 6.30.6
+ '@zondax/ledger-js@1.2.0':
+ dependencies:
+ '@ledgerhq/hw-transport': 6.31.4
+
+ '@zondax/ledger-mina-js@0.0.2':
+ dependencies:
+ '@zondax/ledger-js': 1.2.0
+
'@zondax/ledger-stacks@1.0.4':
dependencies:
'@babel/runtime': 7.24.1
@@ -59674,6 +59764,10 @@ snapshots:
min-indent@1.0.1: {}
+ mina-ledger-js@1.0.7:
+ dependencies:
+ buffer: 6.0.3(patch_hash=2xnca52oxhztvr7iaoovwclcze)
+
mini-css-extract-plugin@2.8.1(webpack@5.94.0(metro@0.80.12)):
dependencies:
schema-utils: 4.2.0