Skip to content

Commit cec1599

Browse files
[Coin Modularization] Cardano (LedgerHQ#6812)
* chore: define cardano in its own module Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * fix: lint Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * chore: update unimported Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * chore: feedbacks Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * fix: remove unnecessary test in favor of relying on type Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * fix: lint issue Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * feat: limit code in LLC by adding simpler serialiazer for signer Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * chore: simplify signOperation readability Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * chore: reorganize imports Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> * fix: unimported and lock file Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr> --------- Signed-off-by: Stéphane Prohaszka <stephane.prohaszka@ledger.fr>
1 parent 6623cd1 commit cec1599

File tree

86 files changed

+1951
-1478
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+1951
-1478
lines changed

.changeset/many-hats-protect.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
"@ledgerhq/coin-cardano": minor
3+
"@ledgerhq/errors": minor
4+
"ledger-live-desktop": minor
5+
"live-mobile": minor
6+
"@ledgerhq/live-common": minor
7+
---
8+
9+
Modularize Cardano

apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/Body.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import GenericStepConnectDevice from "~/renderer/modals/Send/steps/GenericStepCo
2424
import StepConfirmation, { StepConfirmationFooter } from "./steps/StepConfirmation";
2525
import { CardanoAccount } from "@ledgerhq/live-common/families/cardano/types";
2626
import { TFunction } from "i18next";
27-
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
27+
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
2828

2929
type OwnProps = {
3030
stepId: StepId;

apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/LedgerPoolIcon.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
1+
import { LEDGER_POOL_IDS, StakePool } from "@ledgerhq/live-common/families/cardano/staking";
22
import React from "react";
33
import { IconContainer } from "~/renderer/components/Delegation/ValidatorRow";
44
import LedgerLiveLogo from "~/renderer/components/LedgerLiveLogo";
55
import Logo from "~/renderer/icons/Logo";
66
import FirstLetterIcon from "~/renderer/components/FirstLetterIcon";
7-
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
87

98
const CardanoLedgerPoolIcon = ({ validator }: { validator: StakePool }) => {
109
return (

apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/ScrollLoadingList.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useCallback, useState, useRef, memo, useEffect } from "react";
22
import debounce from "lodash/debounce";
3-
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
3+
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
44
import styled from "styled-components";
55
import Box from "~/renderer/components/Box";
66
import BigSpinner from "~/renderer/components/BigSpinner";

apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/fields/ValidatorField.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ import IconAngleDown from "~/renderer/icons/AngleDown";
99
import ValidatorRow from "./ValidatorRow";
1010
import { Account } from "@ledgerhq/types-live";
1111
import { TransactionStatus } from "@ledgerhq/live-common/generated/types";
12-
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
12+
import {
13+
LEDGER_POOL_IDS,
14+
StakePool,
15+
fetchPoolDetails,
16+
} from "@ledgerhq/live-common/families/cardano/staking";
1317
import { useCardanoFamilyPools } from "@ledgerhq/live-common/families/cardano/react";
14-
import { fetchPoolDetails } from "@ledgerhq/live-common/families/cardano/api/getPools";
1518
import ValidatorSearchInput from "~/renderer/components/Delegation/ValidatorSearchInput";
16-
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
1719
import { CardanoDelegation } from "@ledgerhq/live-common/families/cardano/types";
1820
import BigSpinner from "~/renderer/components/BigSpinner";
1921
import { useAccountUnit } from "~/renderer/hooks/useAccountUnit";

apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/fields/ValidatorRow.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Text from "~/renderer/components/Text";
1111
import Check from "~/renderer/icons/Check";
1212
import { openURL } from "~/renderer/linking";
1313
import LedgerPoolIcon from "../LedgerPoolIcon";
14-
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
14+
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
1515

1616
type Props = {
1717
currency: CryptoCurrency;

apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/steps/StepDelegation.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Box from "~/renderer/components/Box";
88
import Button from "~/renderer/components/Button";
99
import { AccountBridge } from "@ledgerhq/types-live";
1010
import { Transaction as CardanoTransaction } from "@ledgerhq/live-common/families/cardano/types";
11-
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
11+
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
1212
import ValidatorField from "../fields/ValidatorField";
1313
import ErrorBanner from "~/renderer/components/ErrorBanner";
1414
import AccountFooter from "~/renderer/modals/Send/AccountFooter";

apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
Transaction,
88
TransactionStatus,
99
} from "@ledgerhq/live-common/families/cardano/types";
10-
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
10+
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
1111

1212
export type StepId = "validator" | "summary" | "connectDevice" | "confirmation";
1313

apps/ledger-live-mobile/src/families/cardano/DelegationFlow/02-Summary.tsx

+7-7
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,19 @@ import { getAccountCurrency } from "@ledgerhq/live-common/account/index";
1010
import { getAccountBridge } from "@ledgerhq/live-common/bridge/index";
1111
import useBridgeTransaction from "@ledgerhq/live-common/bridge/useBridgeTransaction";
1212
import { formatCurrencyUnit, getCurrencyColor } from "@ledgerhq/live-common/currencies/index";
13-
import type {
14-
APIGetPoolsDetail,
15-
StakePool,
16-
} from "@ledgerhq/live-common/families/cardano/api/api-types";
13+
import {
14+
LEDGER_POOL_IDS,
15+
fetchPoolDetails,
16+
type APIGetPoolsDetail,
17+
type StakePool,
18+
} from "@ledgerhq/live-common/families/cardano/staking";
1719
import type {
1820
CardanoAccount,
1921
CardanoDelegation,
22+
TransactionStatus,
2023
} from "@ledgerhq/live-common/families/cardano/types";
21-
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
22-
import { fetchPoolDetails } from "@ledgerhq/live-common/families/cardano/api/getPools";
2324
import { Box, Text } from "@ledgerhq/native-ui";
2425
import { AccountLike } from "@ledgerhq/types-live";
25-
import { TransactionStatus } from "@ledgerhq/live-common/families/cardano/types";
2626
import Button from "~/components/Button";
2727
import Skeleton from "~/components/Skeleton";
2828
import Circle from "~/components/Circle";

apps/ledger-live-mobile/src/families/cardano/DelegationFlow/SelectPool.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import invariant from "invariant";
33
import React, { useCallback } from "react";
44
import { FlatList, StyleSheet, View, SafeAreaView } from "react-native";
55
import { useSelector } from "react-redux";
6-
import type { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
6+
import type { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
77
import { useCardanoFamilyPools } from "@ledgerhq/live-common/families/cardano/react";
88
import { TrackScreen } from "~/analytics";
99
import { ScreenName } from "~/const";

apps/ledger-live-mobile/src/families/cardano/DelegationFlow/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { Transaction, TransactionStatus } from "@ledgerhq/live-common/families/cardano/types";
22
import type { Operation } from "@ledgerhq/types-live";
33
import type { Device } from "@ledgerhq/live-common/hw/actions/types";
4-
import type { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
4+
import type { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
55
import { ScreenName } from "~/const";
66

77
export type CardanoDelegationFlowParamList = {

apps/ledger-live-mobile/src/families/cardano/Delegations/Row.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useTranslation } from "react-i18next";
44
import { useTheme } from "@react-navigation/native";
55
import { Text } from "@ledgerhq/native-ui";
66
import type { CardanoDelegation } from "@ledgerhq/live-common/families/cardano/types";
7-
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
7+
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/staking";
88
import { Currency, Unit } from "@ledgerhq/types-cryptoassets";
99
import CounterValue from "~/components/CounterValue";
1010
import ArrowRight from "~/icons/ArrowRight";

apps/ledger-live-mobile/src/families/cardano/Delegations/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type {
77
CardanoAccount,
88
CardanoDelegation,
99
} from "@ledgerhq/live-common/families/cardano/types";
10-
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
10+
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/staking";
1111
import { getDefaultExplorerView, getStakePoolExplorer } from "@ledgerhq/live-common/explorers";
1212

1313
import { StackNavigationProp } from "@react-navigation/stack";

apps/ledger-live-mobile/src/families/cardano/shared/PoolRow.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useCallback } from "react";
22
import { Trans } from "react-i18next";
33
import { StyleSheet, View } from "react-native";
4-
import type { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
4+
import type { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
55
import { Text } from "@ledgerhq/native-ui";
66
import Touchable from "~/components/Touchable";
77
import PoolImage from "./PoolImage";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module.exports = {
2+
env: {
3+
browser: true,
4+
es6: true,
5+
},
6+
overrides: [
7+
{
8+
files: ["src/**/*.test.{ts,tsx}"],
9+
env: {
10+
"jest/globals": true,
11+
},
12+
plugins: ["jest"],
13+
},
14+
],
15+
rules: {
16+
"no-console": ["error", { allow: ["warn", "error"] }],
17+
"@typescript-eslint/no-empty-function": "off",
18+
"@typescript-eslint/no-explicit-any": "warn",
19+
},
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"entry": [
3+
"src/account.ts",
4+
"src/api/getPools.ts",
5+
"src/bridge/index.ts",
6+
"src/cli-transaction.ts",
7+
"src/datasets/rawAccount.1.ts",
8+
"src/datasets/scanAccounts.ts",
9+
"src/deviceTransactionConfig.ts",
10+
"src/errors.ts",
11+
"src/specs.ts",
12+
"src/speculos-deviceActions.ts",
13+
"src/transaction.ts",
14+
"src/utils.ts"
15+
],
16+
"ignoreUnimported": [
17+
"src/api/getDelegationInfo.ts",
18+
"src/api/getNetworkInfo.ts",
19+
"src/api/getTransactions.ts",
20+
"src/api/submitTransaction.ts",
21+
"src/hw-getAddress.ts",
22+
"src/js-broadcast.ts",
23+
"src/js-buildTransaction.ts",
24+
"src/js-estimateMaxSpendable.ts",
25+
"src/js-getTransactionStatus.ts",
26+
"src/js-signOperation.ts",
27+
"src/js-synchronisation.ts",
28+
"src/js-transaction.ts",
29+
"src/postSyncPatch.ts",
30+
"src/serialization.ts",
31+
"src/signer.ts"
32+
]
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/** @type {import('ts-jest/dist/types').JestConfigWithTsJest} */
2+
module.exports = {
3+
collectCoverageFrom: ["src/**/*.ts"],
4+
coverageDirectory: "coverage",
5+
preset: "ts-jest",
6+
testEnvironment: "node",
7+
testPathIgnorePatterns: ["lib/", "lib-es/"],
8+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
{
2+
"name": "@ledgerhq/coin-cardano",
3+
"version": "0.0.1",
4+
"description": "Ledger Cardano Coin integration",
5+
"keywords": [
6+
"Ledger",
7+
"LedgerWallet",
8+
"ada",
9+
"Cardano",
10+
"Hardware Wallet"
11+
],
12+
"repository": {
13+
"type": "git",
14+
"url": "https://github.com/LedgerHQ/ledger-live.git"
15+
},
16+
"bugs": {
17+
"url": "https://github.com/LedgerHQ/ledger-live/issues"
18+
},
19+
"homepage": "https://github.com/LedgerHQ/ledger-live/tree/develop/libs/coin-modules/coin-cardano",
20+
"publishConfig": {
21+
"access": "public"
22+
},
23+
"typesVersions": {
24+
"*": {
25+
"lib/*": [
26+
"lib/*"
27+
],
28+
"lib-es/*": [
29+
"lib-es/*"
30+
],
31+
"bridge": [
32+
"lib/bridge/index"
33+
],
34+
"*": [
35+
"lib/*"
36+
]
37+
}
38+
},
39+
"exports": {
40+
"./lib/*": "./lib/*.js",
41+
"./lib-es/*": "./lib-es/*.js",
42+
"./bridge": {
43+
"require": "./lib/bridge/index.js",
44+
"default": "./lib-es/bridge/index.js"
45+
},
46+
"./*": {
47+
"require": "./lib/*.js",
48+
"default": "./lib-es/*.js"
49+
},
50+
"./package.json": "./package.json"
51+
},
52+
"license": "Apache-2.0",
53+
"dependencies": {
54+
"@ledgerhq/coin-framework": "workspace:^",
55+
"@ledgerhq/cryptoassets": "workspace:^",
56+
"@ledgerhq/devices": "workspace:^",
57+
"@ledgerhq/errors": "workspace:^",
58+
"@ledgerhq/live-env": "workspace:^",
59+
"@ledgerhq/live-network": "workspace:^",
60+
"@ledgerhq/logs": "workspace:^",
61+
"@ledgerhq/types-cryptoassets": "workspace:^",
62+
"@ledgerhq/types-live": "workspace:^",
63+
"@stricahq/bip32ed25519": "^1.0.3",
64+
"@stricahq/typhonjs": "^1.2.6",
65+
"bech32": "^1.1.3",
66+
"bignumber.js": "^9.1.2",
67+
"expect": "^27.4.6",
68+
"invariant": "^2.2.2",
69+
"lodash": "^4.17.21",
70+
"rxjs": "^7.8.1"
71+
},
72+
"devDependencies": {
73+
"@types/invariant": "^2.2.2",
74+
"@types/jest": "^29.5.10",
75+
"@types/lodash": "^4.14.191",
76+
"jest": "^29.7.0",
77+
"ts-jest": "^29.1.1"
78+
},
79+
"scripts": {
80+
"clean": "rimraf lib lib-es",
81+
"build": "tsc && tsc -m ES6 --outDir lib-es",
82+
"coverage": "jest --coverage --testPathIgnorePatterns='/bridge.integration.test.ts|node_modules|lib-es|lib/' --passWithNoTests && mv coverage/coverage-final.json coverage/coverage-cardano.json",
83+
"prewatch": "pnpm build",
84+
"watch": "tsc --watch",
85+
"doc": "documentation readme src/** --section=API --pe ts --re ts --re d.ts",
86+
"lint": "eslint ./src --no-error-on-unmatched-pattern --ext .ts,.tsx --cache",
87+
"lint:fix": "pnpm lint --fix",
88+
"test": "jest",
89+
"unimported": "unimported"
90+
}
91+
}

libs/ledger-live-common/src/families/cardano/account.ts libs/coin-modules/coin-cardano/src/account.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import invariant from "invariant";
2-
import { getAccountCurrency } from "../../account";
3-
import { formatCurrencyUnit } from "../../currencies";
2+
import { getAccountCurrency } from "@ledgerhq/coin-framework/account/index";
3+
import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/index";
44
import { CardanoAccount } from "./types";
55

66
export function formatAccountSpecifics(account: CardanoAccount): string {

0 commit comments

Comments
 (0)