Skip to content

Commit

Permalink
[Coin Modularization] Cardano (#6812)
Browse files Browse the repository at this point in the history
* chore: define cardano in its own module

Signed-off-by: Stéphane Prohaszka <[email protected]>

* fix: lint

Signed-off-by: Stéphane Prohaszka <[email protected]>

* chore: update unimported

Signed-off-by: Stéphane Prohaszka <[email protected]>

* chore: feedbacks

Signed-off-by: Stéphane Prohaszka <[email protected]>

* fix: remove unnecessary test in favor of relying on type

Signed-off-by: Stéphane Prohaszka <[email protected]>

* fix: lint issue

Signed-off-by: Stéphane Prohaszka <[email protected]>

* feat: limit code in LLC by adding simpler serialiazer for signer

Signed-off-by: Stéphane Prohaszka <[email protected]>

* chore: simplify signOperation readability

Signed-off-by: Stéphane Prohaszka <[email protected]>

* chore: reorganize imports

Signed-off-by: Stéphane Prohaszka <[email protected]>

* fix: unimported and lock file

Signed-off-by: Stéphane Prohaszka <[email protected]>

---------

Signed-off-by: Stéphane Prohaszka <[email protected]>
  • Loading branch information
sprohaszka-ledger committed May 24, 2024
1 parent 6623cd1 commit cec1599
Show file tree
Hide file tree
Showing 86 changed files with 1,951 additions and 1,478 deletions.
9 changes: 9 additions & 0 deletions .changeset/many-hats-protect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@ledgerhq/coin-cardano": minor
"@ledgerhq/errors": minor
"ledger-live-desktop": minor
"live-mobile": minor
"@ledgerhq/live-common": minor
---

Modularize Cardano
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import GenericStepConnectDevice from "~/renderer/modals/Send/steps/GenericStepCo
import StepConfirmation, { StepConfirmationFooter } from "./steps/StepConfirmation";
import { CardanoAccount } from "@ledgerhq/live-common/families/cardano/types";
import { TFunction } from "i18next";
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";

type OwnProps = {
stepId: StepId;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import { LEDGER_POOL_IDS, StakePool } from "@ledgerhq/live-common/families/cardano/staking";
import React from "react";
import { IconContainer } from "~/renderer/components/Delegation/ValidatorRow";
import LedgerLiveLogo from "~/renderer/components/LedgerLiveLogo";
import Logo from "~/renderer/icons/Logo";
import FirstLetterIcon from "~/renderer/components/FirstLetterIcon";
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";

const CardanoLedgerPoolIcon = ({ validator }: { validator: StakePool }) => {
return (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { useCallback, useState, useRef, memo, useEffect } from "react";
import debounce from "lodash/debounce";
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
import styled from "styled-components";
import Box from "~/renderer/components/Box";
import BigSpinner from "~/renderer/components/BigSpinner";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import IconAngleDown from "~/renderer/icons/AngleDown";
import ValidatorRow from "./ValidatorRow";
import { Account } from "@ledgerhq/types-live";
import { TransactionStatus } from "@ledgerhq/live-common/generated/types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import {
LEDGER_POOL_IDS,
StakePool,
fetchPoolDetails,
} from "@ledgerhq/live-common/families/cardano/staking";
import { useCardanoFamilyPools } from "@ledgerhq/live-common/families/cardano/react";
import { fetchPoolDetails } from "@ledgerhq/live-common/families/cardano/api/getPools";
import ValidatorSearchInput from "~/renderer/components/Delegation/ValidatorSearchInput";
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
import { CardanoDelegation } from "@ledgerhq/live-common/families/cardano/types";
import BigSpinner from "~/renderer/components/BigSpinner";
import { useAccountUnit } from "~/renderer/hooks/useAccountUnit";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import Text from "~/renderer/components/Text";
import Check from "~/renderer/icons/Check";
import { openURL } from "~/renderer/linking";
import LedgerPoolIcon from "../LedgerPoolIcon";
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";

type Props = {
currency: CryptoCurrency;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import Box from "~/renderer/components/Box";
import Button from "~/renderer/components/Button";
import { AccountBridge } from "@ledgerhq/types-live";
import { Transaction as CardanoTransaction } from "@ledgerhq/live-common/families/cardano/types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
import ValidatorField from "../fields/ValidatorField";
import ErrorBanner from "~/renderer/components/ErrorBanner";
import AccountFooter from "~/renderer/modals/Send/AccountFooter";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
Transaction,
TransactionStatus,
} from "@ledgerhq/live-common/families/cardano/types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import { StakePool } from "@ledgerhq/live-common/families/cardano/staking";

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,19 @@ import { getAccountCurrency } from "@ledgerhq/live-common/account/index";
import { getAccountBridge } from "@ledgerhq/live-common/bridge/index";
import useBridgeTransaction from "@ledgerhq/live-common/bridge/useBridgeTransaction";
import { formatCurrencyUnit, getCurrencyColor } from "@ledgerhq/live-common/currencies/index";
import type {
APIGetPoolsDetail,
StakePool,
} from "@ledgerhq/live-common/families/cardano/api/api-types";
import {
LEDGER_POOL_IDS,
fetchPoolDetails,
type APIGetPoolsDetail,
type StakePool,
} from "@ledgerhq/live-common/families/cardano/staking";
import type {
CardanoAccount,
CardanoDelegation,
TransactionStatus,
} from "@ledgerhq/live-common/families/cardano/types";
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
import { fetchPoolDetails } from "@ledgerhq/live-common/families/cardano/api/getPools";
import { Box, Text } from "@ledgerhq/native-ui";
import { AccountLike } from "@ledgerhq/types-live";
import { TransactionStatus } from "@ledgerhq/live-common/families/cardano/types";
import Button from "~/components/Button";
import Skeleton from "~/components/Skeleton";
import Circle from "~/components/Circle";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import invariant from "invariant";
import React, { useCallback } from "react";
import { FlatList, StyleSheet, View, SafeAreaView } from "react-native";
import { useSelector } from "react-redux";
import type { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import type { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
import { useCardanoFamilyPools } from "@ledgerhq/live-common/families/cardano/react";
import { TrackScreen } from "~/analytics";
import { ScreenName } from "~/const";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Transaction, TransactionStatus } from "@ledgerhq/live-common/families/cardano/types";
import type { Operation } from "@ledgerhq/types-live";
import type { Device } from "@ledgerhq/live-common/hw/actions/types";
import type { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import type { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
import { ScreenName } from "~/const";

export type CardanoDelegationFlowParamList = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useTranslation } from "react-i18next";
import { useTheme } from "@react-navigation/native";
import { Text } from "@ledgerhq/native-ui";
import type { CardanoDelegation } from "@ledgerhq/live-common/families/cardano/types";
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/staking";
import { Currency, Unit } from "@ledgerhq/types-cryptoassets";
import CounterValue from "~/components/CounterValue";
import ArrowRight from "~/icons/ArrowRight";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import type {
CardanoAccount,
CardanoDelegation,
} from "@ledgerhq/live-common/families/cardano/types";
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/utils";
import { LEDGER_POOL_IDS } from "@ledgerhq/live-common/families/cardano/staking";
import { getDefaultExplorerView, getStakePoolExplorer } from "@ledgerhq/live-common/explorers";

import { StackNavigationProp } from "@react-navigation/stack";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useCallback } from "react";
import { Trans } from "react-i18next";
import { StyleSheet, View } from "react-native";
import type { StakePool } from "@ledgerhq/live-common/families/cardano/api/api-types";
import type { StakePool } from "@ledgerhq/live-common/families/cardano/staking";
import { Text } from "@ledgerhq/native-ui";
import Touchable from "~/components/Touchable";
import PoolImage from "./PoolImage";
Expand Down
20 changes: 20 additions & 0 deletions libs/coin-modules/coin-cardano/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -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",
},
};
33 changes: 33 additions & 0 deletions libs/coin-modules/coin-cardano/.unimportedrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"entry": [
"src/account.ts",
"src/api/getPools.ts",
"src/bridge/index.ts",
"src/cli-transaction.ts",
"src/datasets/rawAccount.1.ts",
"src/datasets/scanAccounts.ts",
"src/deviceTransactionConfig.ts",
"src/errors.ts",
"src/specs.ts",
"src/speculos-deviceActions.ts",
"src/transaction.ts",
"src/utils.ts"
],
"ignoreUnimported": [
"src/api/getDelegationInfo.ts",
"src/api/getNetworkInfo.ts",
"src/api/getTransactions.ts",
"src/api/submitTransaction.ts",
"src/hw-getAddress.ts",
"src/js-broadcast.ts",
"src/js-buildTransaction.ts",
"src/js-estimateMaxSpendable.ts",
"src/js-getTransactionStatus.ts",
"src/js-signOperation.ts",
"src/js-synchronisation.ts",
"src/js-transaction.ts",
"src/postSyncPatch.ts",
"src/serialization.ts",
"src/signer.ts"
]
}
8 changes: 8 additions & 0 deletions libs/coin-modules/coin-cardano/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/** @type {import('ts-jest/dist/types').JestConfigWithTsJest} */
module.exports = {
collectCoverageFrom: ["src/**/*.ts"],
coverageDirectory: "coverage",
preset: "ts-jest",
testEnvironment: "node",
testPathIgnorePatterns: ["lib/", "lib-es/"],
};
91 changes: 91 additions & 0 deletions libs/coin-modules/coin-cardano/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
{
"name": "@ledgerhq/coin-cardano",
"version": "0.0.1",
"description": "Ledger Cardano Coin integration",
"keywords": [
"Ledger",
"LedgerWallet",
"ada",
"Cardano",
"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-cardano",
"publishConfig": {
"access": "public"
},
"typesVersions": {
"*": {
"lib/*": [
"lib/*"
],
"lib-es/*": [
"lib-es/*"
],
"bridge": [
"lib/bridge/index"
],
"*": [
"lib/*"
]
}
},
"exports": {
"./lib/*": "./lib/*.js",
"./lib-es/*": "./lib-es/*.js",
"./bridge": {
"require": "./lib/bridge/index.js",
"default": "./lib-es/bridge/index.js"
},
"./*": {
"require": "./lib/*.js",
"default": "./lib-es/*.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-env": "workspace:^",
"@ledgerhq/live-network": "workspace:^",
"@ledgerhq/logs": "workspace:^",
"@ledgerhq/types-cryptoassets": "workspace:^",
"@ledgerhq/types-live": "workspace:^",
"@stricahq/bip32ed25519": "^1.0.3",
"@stricahq/typhonjs": "^1.2.6",
"bech32": "^1.1.3",
"bignumber.js": "^9.1.2",
"expect": "^27.4.6",
"invariant": "^2.2.2",
"lodash": "^4.17.21",
"rxjs": "^7.8.1"
},
"devDependencies": {
"@types/invariant": "^2.2.2",
"@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 ES6 --outDir lib-es",
"coverage": "jest --coverage --testPathIgnorePatterns='/bridge.integration.test.ts|node_modules|lib-es|lib/' --passWithNoTests && mv coverage/coverage-final.json coverage/coverage-cardano.json",
"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"
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import invariant from "invariant";
import { getAccountCurrency } from "../../account";
import { formatCurrencyUnit } from "../../currencies";
import { getAccountCurrency } from "@ledgerhq/coin-framework/account/index";
import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/index";
import { CardanoAccount } from "./types";

export function formatAccountSpecifics(account: CardanoAccount): string {
Expand Down
Loading

0 comments on commit cec1599

Please sign in to comment.